使用 uwsgi 配置 Nginx,使用 python 脚本作为 cgi - 502 Bad Gateway

Posted

技术标签:

【中文标题】使用 uwsgi 配置 Nginx,使用 python 脚本作为 cgi - 502 Bad Gateway【英文标题】:Nginx configuration with uwsgi, with python scripts as cgi - 502 Bad Gateway 【发布时间】:2015-03-17 17:50:31 【问题描述】:

我正在尝试设置 uwsgi,它将以 cgi 方式提供 python 文件。使用 nginx 作为代理。

这是我运行 uwsgi "pyApp.py" 的 .ini 文件

[uwsgi]
plugins = cgi
socket = 127.0.0.1:9010
cgi = /=/usr/share/test/
cgi-allowed-ext = .py
cgi-helper = .py=python

我在 /usr/share/test/firstapp.py 有一个文件“firstapp.py” 它的内容是

#!/usr/bin/python
print "Content-type: text/html\n\n"
print "<html><body><h1>It works! Cool!!</h1></body></html>"

我正在使用命令运行 uwsgi 的实例

uwsgi --http :9011 --http-modifier1 9 --ini pyApp.ini --master

我已经使用 nginx 配置了几个虚拟主机。并且其中一个必须指向目录 /usr/share/test/ 当 url 中包含“/cgi-bin/”时。

nginx 配置是 - [也是唯一的默认配置]

server 
        listen 80 default_server;
        listen [::]:80 default_server ipv6only=on;

        root /var/www/pythonsite.com/html;
        index index.html index.htm;

        server_name pythonsite.com www.pythonsite.com;

        location / 
                try_files $uri $uri/ =404;
        

        location /cgi-bin 
                include uwsgi_params;
                uwsgi_modifier1 9;
                uwsgi_pass 127.0.0.1:9010;
        

但是当我尝试通过 url 从浏览器访问“cgi”脚本时

http://pythonsite.com/cgi-bin/firstapp.py

默认 URL“pythonsite.com”似乎工作正常,但上面带有“cgi-bin”的 URl 似乎缺少一些东西。 我得到“502 坏网关”。我错过了什么。为了这样使用python脚本?

编辑:

此外,每次我在浏览器中请求 URL http://pythonsite.com/cgi-bin/firstapp.py" 时,uwsgi 服务器实例上都会显示一条日志

-- unavailable modifier requested: 9 --

【问题讨论】:

重新检查其他东西然后再检查 nginx,即测试你自己的 your_ip::9011 和 your_ip:9010 是否有效。现在他们没有,所以你不能把坏消息归咎于 nginx。 是的,它们似乎无法正常工作,但在 uwsgi 日志中,我收到 "invalid request block size: 21573 (max 4096)...skip" for 127.0..0.1:9010 并在浏览器页面上重置连接 @DmitryVerkhoturov 和“127.0.0.1:9011”我在浏览器上收到“内部服务器错误”消息。和 uwsgi 日志为 "--- no python application found, check your startup logs for errors ---" 重新检查,谷歌,重新检查。我从来没有尝试过设置 uwsgi,有像 gunicorn 这样更简单的方法来处理这些事情。奇怪了,为什么你用--http :9011参数运行uwsgi? @DmitryVerkhoturov 好吧,即使在删除 --http 之后,它也是一样的.. 我在配置 uwsgi 的方式上遗漏了一些东西。可能是.ini文件的写法,也可能是初始化uwsgi实例的命令的写法。还要弄清楚是什么。任何帮助表示赞赏。 【参考方案1】:

好吧,经过我朋友HD 的大量搜索和帮助后,

我需要使用curl http://uwsgi.it/install | bash -s cgi /tmp/uwsgi 安装cgi,然后使用/tmp/uwsgi 中的新二进制文件运行启动uwsgi 的命令。

【讨论】:

以上是关于使用 uwsgi 配置 Nginx,使用 python 脚本作为 cgi - 502 Bad Gateway的主要内容,如果未能解决你的问题,请参考以下文章

使用 uwsgi 配置 Nginx,使用 python 脚本作为 cgi - 502 Bad Gateway

uwsgi + nginx 配置

Ubuntu中配置uwsgi和nginx

在 Docker 上使用 Nginx、uWSGI 和 Postgres 配置 Django

Django Nginx+uwsgi 安装配置

python3 + Django + uwsgi + nginx 配置部署笔记