0

我用 Python 编写了一个简单的 CMS。它目前在 Apache 上运行,它由 /usr/lib/cgi-bin 中的一堆 python 脚本组成。我正在尝试让 CMS 在 Nginx 中工作。我以前从未使用过 Nginx,因此我会感谢任何熟悉它的人的意见。

我希望无需修改即可运行 CMS - 理想情况下,我希望能够将 CMS 与 Apache 和 Nginx 一起使用,并且我不想维护两个单独的版本。

主脚本是/usr/lib/cgi-bin/pyindex.py。我在 /etc/nginx/sites-available/default 中设置了两个位置:

location / {
    # First attempt to serve request as file, then
    # as directory, then fall back to displaying a 404.
    try_files $uri $uri/dir.html /cgi-bin/pyindex.py?q=$uri;
}

location /cgi-bin/ {
            include uwsgi_params;
            uwsgi_pass 127.0.0.1:8080;
}

我安装了 uwsgi 和 uwsgi-plugin-python 并设置 /etc/uwsgi/apps-available/mydomainname.com.xml 如下:

<uwsgi>
    <plugin>python</plugin>
    <plugin>cgi</plugin>
    <socket>127.0.0.1:8080</socket>
    <chdir>/usr/lib/cgi-bin/</chdir>
    <pythonpath>/usr/lib/cgi-bin/</pythonpath>
    <module>pyindex.py</module>
    <cgi>/cgi-bin=/usr/lib/cgi-bin/</cgi>
    <cgi-allowed-ext>.py</cgi-allowed-ext>
    <master/>
    <processes>4</processes>
    <harakiri>60</harakiri>
    <reload-mercy>8</reload-mercy>
    <cpu-affinity>1</cpu-affinity>
    <stats>/tmp/stats.socket</stats>
    <max-requests>2000</max-requests>
    <limit-as>512</limit-as>
    <reload-on-as>256</reload-on-as>
    <reload-on-rss>192</reload-on-rss>
    <no-orphans/>
    <vacuum/>
</uwsgi>

当我将浏览器指向任何动态页面时,我会看到以下错误消息:

uWSGI 错误

未找到 Python 应用程序

所以看起来 nginx 正在成功地将请求传递给 uwsgi,但 uwsgi 设置不正确。

/var/log/uwsgi/app/mydomainname.com.log 中的日志显示 pyindex.py 在 uwsgi 启动时运行,并且由于 QUERY_STRING 环境变量不可用而崩溃。当请求从 nginx 传递到 uwsgi 时,脚本不会被执行。

有没有办法设置它,以便 pyindex.py 在启动时不执行,而是在 uwsgi 收到来自 nginx 的请求时执行?

我在 Raspbian 上使用 Nginx v 1.2.1、uwsgi 1.2.3、Python 2.7。

提前致谢

4

1 回答 1

1

忘记 uWSGI python 插件,你不需要它。

您需要 CGI 插件:

http://uwsgi-docs.readthedocs.org/en/latest/CGI.html

于 2013-11-08T19:03:09.963 回答