我正在运行带有 Python 3.6.8 和 Apache/2.4.37 的 CentOS 8.1。
我是 mod_wsgi 的新手。我找到了这个“hello world”示例并让它运行:
我遇到的问题是,这似乎要求将每个 .py 文件添加到其自己的 .conf 文件中,然后将其添加到 conf.d,如 /etc/httpd/conf.d/helloworld.conf 中所示:
WSGIScriptAlias /helloworld /var/www/python/helloworld.py
<Directory /var/www/python/>
Order allow,deny
Allow from all
</Directory>
并在 /var/www/python 之外运行 python (.py) 脚本。
这非常不方便,因为每个 Python 程序似乎都需要硬编码,而不是在 /var/www/html 目录中运行。我们在 Python 2 中进行开发,其中 .py 文件与 .html 和 .php 文件在同一目录中执行。在 CentOS 7 下,我们只需在 httpd.conf 中添加一个条目来识别所有 .py 文件并确保它们由 Python 执行。
我看到作者提到这是为了安全。有没有办法做到这一点既安全又不必收集服务器上的所有 .py 文件并为其创建 .conf 文件,如这个“hello world”示例所示?
如果我对使用 mod_wsgi 的看法完全错误,请赐教。
答案1
mod_wsgi 还有WSGIScriptAliasMatch
这可能对你有用,例如
WSGIScriptAliasMatch ^/([^/]+).py /var/www/python/$1.py
如果你不需要较短的路径,你也可以使用WSGIScriptAlias
对于整个文件夹:
WSGIScriptAlias /python/ /var/www/python/
这相当于:
Alias /python/ /var/www/python/
<Location /python>
SetHandler wsgi-script
Options +ExecCGI
</Location>
这类似于你使用 mod_python 的发布者处理程序:
<Directory /var/www/python>
AddHandler mod_python .py
PythonHandler mod_python.publisher
PythonDebug On
</Directory>
更多示例请参考mod_wsgi 配置指南