我要做的是在nginx 1.6.3上使用uwsgi设置django,并在centos7上使用http绑定到端口8000。 我查看了blog
博客非常令人困惑,它对我的nginx版本无效; 但文档很不错,所有步骤都让我使用uwsgi成功执行,但我遇到了nginx问题。
首先,我只能将nginx作为sudoer(root)运行,所以我为root用户创建了virtualenv。 然后,我在我的nginx配置: /etc/nginx/sites-enabled/mysite_nginx.conf 并做了一个软链接:
sudo ln -s /etc/nginx/sites-enabled/mysite_nginx.conf /etc/nginx/mysite_nginx.conf
但是在nginx重启后nginx没有选择它。有谁知道为什么?
要继续,我决定将/etc/nginx/mysite_nginx.conf重命名为/etc/nginx/nginx.conf以强制它被接收。 我的django应用程序位于: 的/ usr /共享/ nginx的/ firstsite 由root拥有,我的nginx用户是nginx。 这是我的nginx.conf:
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
events {
worker_connections 1024;
}
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
include /etc/nginx/conf.d/*.conf;
upstream django {
server 127.0.0.1:8001;
}
server {
listen 8000 default_server;
listen [::]:8000 default_server;
server_name _;
root /usr/share/nginx/firstsite;
client_max_body_size 300M; # adjust to taste
location /media {
alias /usr/share/nginx/firstsite/media;
}
location /static {
alias /usr/share/nginx/firstsite/static;
}
location / {
uwsgi_pass django;
include /usr/share/nginx/firstsite/uwsgi_params;
}
}
}
另外我不明白如何配置uwsgi。我有一个有效的wusgi.ini。我只需要知道uwsgi.ini文件的放置位置以及是否可以以非root用户身份运行nginx和uwsgi。
我已经运行了nginx测试,它说我的配置文件没问题。 最后,我在尝试启动nginx时遇到错误。 它说它没有绑定到端口8000的权限。 所以我看了this post
然后我尝试了:yum -y install policycoreutils-python
semanage port -l | grep http_port_t
semanage port -a -t http_port_t -p tcp 8000
我收到错误:
ValueError: Port tcp/8000 already defined
我知道这里有几个问题和问题,但目标很明确。
答案 0 :(得分:0)
可能是......
a)系统防火墙是块python / nginx / bash等从绑定到端口80或
b)您需要使用sudo
运行它。这是因为类Unix操作系统需要超级用户权限才能将应用程序绑定到well-known port。
答案 1 :(得分:0)
nginx
通常以root身份运行。 uwsgi
也可以以root身份或普通用户身份运行,通常您可以以root用户身份运行,并将uwsgi应用程序配置为以非root用户身份运行(您可以在uwsgi配置文件中为您的应用程序指定) - 查看@doniyor发布的链接,了解有关如何设置附庸的详细信息。
您也可以进行设置,以便在更改文件(通常是应用程序的wsgi文件)时,uwsgi将重新启动该应用程序。您通常在该文件上使用touch
命令,并且该文件位于普通用户帐户中,您可以轻松地重新启动应用程序而无需成为root用户。
原因nginx
未提取您的文件是文件需要位于/etc/nginx/sites-enabled
,ln
命令获取-s
开关中的来源,所以你实际上是以相反的方式链接文件。
即使对于普通用户,绑定到未预留端口的权限也不应成为问题。有可能某些东西已经在该端口上运行,尝试不同的东西,如8001.