本地主机上的 Nginx + uWSGI *总是*给出 502 Bad Gateway。有什么办法可以解决这个问题吗?

本地主机上的 Nginx + uWSGI *总是*给出 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(它工作正常并且在我点击时显示“欢迎使用 Nginx” http://localhost/)并将其替换为来自 linode 指南的自定义 nginx conf,该 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 配置文件与我上面链接的 linode 指南中详述的完全相同,唯一的不同是,在我的设置中,他们示例中的“duckington.org”被替换为“myHostname”。我的 nginx 错误日志中没有错误。Nginx 安装在 ,/opt/nginxuWSGI 位于 ,/opt/uwsgi如上面链接的指南中所述。我没有触及指南中未提到的任何文件。

到目前为止,我已尝试解决此问题:

  1. 修改配置后启动、停止和重新启动 nginx 和 uWSGI 服务。
  2. 尝试使用 etc 的“debian 布局”sites-enabled来添加上面列出的自定义虚拟主机,同时保持默认的 nginx.conf 不变(除了包含指向 sites-enabled 中的虚拟主机的语句)。Nginx 甚至没有启动,错误日志报告了“0.0.0.0:80 上的冲突服务器名称“localhost”,已忽略”错误。
  3. 阅读有关 Nginx + uWSGI 设置的更多指南,但无法进一步解决问题。

答案1

昨天我看到了你的帖子,正好在寻找相同问题的答案。今天终于找到了问题的根源。

我假设您在 .ini 配置文件中将 chdir 指定为您的项目所在的目录。我的意思是,例如,如果您的项目是“myproject”,并且您将其放在“/var/www/myproject”目录中,则您指定“/var/www”作为 chdir。

因此,所有内部资源的路径都没有明确定义,Python 解释器(可能是您使用的是 Django?)无法访问它们。好的,我将解释解决方案在 Django 项目中的工作原理。例如,假设您的项目内部有一个名为“app1”的应用程序;在您的视图模块中,您正在调用在表单模块中定义的表单;您将这样做:

from app1.forms import *

好吧?嗯,问题是 uwsgi 的路径定义得不太好。你现在应该像这样定义它:

from myproject.app.forms import *

您将看到现在一切都正常了。不再502错误的网关将会出现错误:)

是的,我知道在每个内部资源调用中添加“myproject.”不太优雅。因此,您只需将其添加到“settings.py”文件中即可:

sys.path.append('/var/www/myproject/')

将“/var/www/”替换为您的项目在计算机上所在的路径。有了这个小解决方案,一切都开始为我工作了 :)

我希望我的评论能帮到你。

欢呼吧,何塞

相关内容