在共享主机上呆了很长时间后,我将我的东西移到 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/nginx
uWSGI 位于 ,/opt/uwsgi
如上面链接的指南中所述。我没有触及指南中未提到的任何文件。
到目前为止,我已尝试解决此问题:
- 修改配置后启动、停止和重新启动 nginx 和 uWSGI 服务。
- 尝试使用 etc 的“debian 布局”
sites-enabled
来添加上面列出的自定义虚拟主机,同时保持默认的 nginx.conf 不变(除了包含指向 sites-enabled 中的虚拟主机的语句)。Nginx 甚至没有启动,错误日志报告了“0.0.0.0:80 上的冲突服务器名称“localhost”,已忽略”错误。 - 阅读有关 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/”替换为您的项目在计算机上所在的路径。有了这个小解决方案,一切都开始为我工作了 :)
我希望我的评论能帮到你。
欢呼吧,何塞