我一直在关注数字海洋教程How To Serve Django Applications with uWSGI and Nginx on Ubuntu 14.04,以便稍后我可以使用Nginx + uWSGI部署我自己的django应用程序。
在本教程中,他们创建了2个基本的Django应用程序,稍后将由Nginx提供服务。我已经测试过应用程序只使用Django服务器和uWSGI。
当我传递到Nignx部分时遇到了问题,基本上我没有server_name,现在只有一个IP可以使用,我试图用端口号区分Django应用程序。
默认的Nginx服务器(xxx.xxx.xxx.xxx:80)正确响应,但是当我尝试使用(xxx.xxx.xxx.xxx:8080或xxx.xxx.xxx.xxx)访问Django应用程序时:8081)我得到502坏网关。
我认为我在服务器块中定义 listen 的方式或逻辑存在问题。这样做的正确方法是什么,或者我可能做错了什么。
这是我的服务器块(在已启用网站的情况下):
firstsite app
server { listen xxx.xxx.xxx.xxx:8080; #server_name _; location = /favicon.ico { access_log off; log_not_found off; } location /static/ { root /root/firstsite; } location / { include uwsgi_params; uwsgi_pass unix:/root/firstsite/firstsite.sock; } }
econdsite app
server { listen xxx.xxx.xxx.xxx:8081; #server_name _; location = /favicon.ico { access_log off; log_not_found off; } location /static/ { root /root/secondsite; } location / { include uwsgi_params; uwsgi_pass unix:/root/secondsite/secondsite.sock; } }
默认Nginx
server { listen 80 default_server; #listen [::]:80 default_server ipv6only=on; root /usr/share/nginx/html; index index.html index.htm; # Make site accessible from http://localhost/ server_name localhost; location / { # First attempt to serve request as file, then # as directory, then fall back to displaying a 404. try_files $uri $uri/ =404; # Uncomment to enable naxsi on this location # include /etc/nginx/naxsi.rules } }
更新
我正在检查/ var / log / nginx下的错误日志,当我尝试连接到firstsite时,我收到以下错误:
2016/02/05 15:55:23 [暴击] 11451#0:* 6连接()到 unix:/root/firstsite/firstsite.sock失败(13:权限被拒绝) 连接上游时,客户端:188.37.180.101,服务器:, 请求:“GET / HTTP / 1.1”,上游: “uwsgi:// unix:/root/firstsite/firstsite.sock:”,主持人: “178.62.229.183:8080”
答案 0 :(得分:2)
默认情况下,ubuntu上的Nginx服务器将在mdl
用户上运行,uWSGI服务器赢了(这实际上是一件好事,除非它在root上运行)。如果您正在为uWSGI创建unix套接字,则将定义对任何系统文件的访问权限。默认情况下,对它的访问可能仅限于创建套接字的用户。
更多相关信息,您可以在www-data
目录中创建套接字。该目录只有root用户才能读取,即使权限设置正确,一些Linux发行版也不允许访问任何内容。
所以你需要做的是:
/root/
目录之外(/root/
是个好地方)/var/run
或`--chown-socket yourusername:www-data放入uWSGI启动行)如果您在root上运行该uWSGI服务器,请注意这是非常危险的。在root上运行的任何进程都可以对您的系统执行任何操作,因此如果您在代码中出错或有人入侵,他可以将任何恶意软件注入您的服务器,从中窃取一些数据或者只是销毁所有内容。