本地主机上的Nginx + uWSGI * always *会给出502 Bad Gateway。 任何想法如何解决这个问题?

经过很长时间的共享主机,我正在把我的东西移动到一个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。 我没有触及任何文件,指南没有提到。

到目前为止,我试图解决这个问题:

  1. 修改configuration后,启动,停止并重新启动nginx和uWSGI服务。
  2. 尝试使用sites-enabled等'debian布局'添加我上面列出的自定义虚拟主机,同时保持默认的nginx.conf(include语句指向启用站点的虚拟主机除外)。 Nginx甚至没有启动,错误日志报告“冲突服务器名称”本地主机“0.0.0.0:80,忽略”错误。
  3. 阅读关于Nginx + uWSGI设置的更多指南,而无需进一步解决问题。

我昨天看到你的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,每一个开始为我工作:)

我希望我的评论可以帮助你。

干杯,何塞