经过很长时间的共享主机,我正在把我的东西移动到一个VPS,并有必要了解Nginx + uWSGI部署我的应用程序(python)。 花了几个星期的时间学习基础知识之后,我正在设置我的本地机器(ubuntu 11.04)在Nginx + uWSGI上运行我的应用程序。 我正在使用“Hello world”Ubuntu 10.10 linode指南 。
设置很简单,但是当我运行http://localhost/或http://127.0.0.1我每次都得到一个502 Bad Gateway。 欣赏如何让设置工作的指针。
我的nginx.conf: [我备份了默认的nginx conf(工作正常,当我打到http://localhost/时显示“Welcome to Nginx”),并用linode指南中的这个自定义nginx conf取而代之,它把nginx链接到uWSGI服务器。 ]
worker_processes 1; events { worker_connections 1024; } http { server { listen 80; server_name localhost; access_log /srv/www/myHostname/logs/access.log; error_log /srv/www/myHostname/logs/error.log; location / { include uwsgi_params; uwsgi_pass 127.0.0.1:9001; } location /static { root /srv/www/myHostname/public_html/static/; index index.html index.htm; } } }
我的uWSGI conf与上面链接的linode指南中详细描述的一样,其中一个变化是在我的设置中将“duckington.org”replace为“myHostname”。 我的nginx错误日志没有错误。 安装在/opt/nginx和uWSGI上的Nginx位于上面链接指南中的/opt/uwsgi uwsgi。 我没有触及任何文件,指南没有提到。
到目前为止,我试图解决这个问题:
sites-enabled等'debian布局'添加我上面列出的自定义虚拟主机,同时保持默认的nginx.conf(include语句指向启用站点的虚拟主机除外)。 Nginx甚至没有启动,错误日志报告“冲突服务器名称”本地主机“0.0.0.0:80,忽略”错误。 我昨天看到你的post,只是寻找一个完全相同的问题的答案。 最后,我今天到了问题的根源。
我想你在.iniconfiguration文件中指定chdir作为你的项目所在的目录。 我的意思是,如果你的项目是'myproject',并且你在'/ var / www / myproject'目录下,你可以指定'/ var / www'作为chdir。
所以,所有内部资源的path并没有很好的定义,Python的interpereter(可能是你使用Django?)没有达到他们。 好的,我将解释一个解决scheme在Django项目中的工作原理。 例如,假设您的项目中有一个名为“app1”的应用程序; 在您的视图模块中,您正在调用在表单模块中定义的表单; 你会这样做:
from app1.forms import *
好的? 那么,uwsgi的path并没有很好的定义。 你现在应该这样定义:
from myproject.app.forms import *
你会看到现在一切正在工作。 没有更多的502错误的网关错误将出现你:)
是的,我知道添加“我的项目”并不是很优雅。 到每一个内部资源调用。 所以,你可以简单地把它添加到你的'settings.py'文件中:
sys.path.append('/var/www/myproject/')
用你的项目在你的机器上的path代替'/ var / www /'。 有了这个小小的解决scheme,每一个开始为我工作:)
我希望我的评论可以帮助你。
干杯,何塞