我用 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。
提前致谢