Acache:wsgi 和别名不兼容
Acache: wsgi and alias incompatibility
我正在尝试设置 Apache,以便:
- 如果用户转到
/temp
,则提供文件 /home/temp/public_html/index.html
- 如果用户转到
/temp/app
然后我的 mod-wsgi /home/temp/app/start.wsgi
被执行
我目前有这个:
<VirtualHost *:80>
WSGIDaemonProcess temp user=temp group=temp home=/home/temp/app
WSGIScriptAlias /temp/app /home/temp/app/start.wsgi
Alias /temp /home/temp/public_html
<Directory /home/temp/app>
WSGIProcessGroup temp
WSGIApplicationGroup %{GLOBAL}
Require all granted
</Directory>
</VirtualHost *:80>
但奇怪的是 Alias
似乎优先于 WSGIScriptAlias
而 /temp/app
不起作用...
不是特别漂亮,但我(至少目前)是这样解决的:
<VirtualHost *:80>
WSGIDaemonProcess temp user=temp group=temp home=/home/temp/app
<Directory /home/temp/app>
WSGIProcessGroup temp
WSGIApplicationGroup %{GLOBAL}
Options ExecCGI MultiViews
MultiviewsMatch Handlers
AddHandler cgi-script .cgi
AddHandler wsgi-script .wsgi
Require all granted
</Directory>
Alias /temp /home/temp/app
</VirtualHost>
我没有使用 WSGIScriptAlias
,而是自动将其定义为 运行 .wsgi
个文件。 MultiViews
选项匹配 file
到 file.wsgi
.
此外,为了在我自己的脚本中隐藏扩展名,在每个 .wsgi
中我必须重新定义脚本文件名:
from server_public import app as _application # my flask app
# get rid of the .wsgi extension
def application(environ, start_response):
if environ['SCRIPT_NAME'].endswith('.wsgi'):
environ['SCRIPT_NAME'] = environ['SCRIPT_NAME'][:-5]
return _application(environ, start_response)
我还必须将我的 public_html/index.html
移动到 app/index.html
。
我更喜欢更简单的解决方案,我为 /temp
提供 index.html
,为 /temp/app
提供脚本别名...但不确定是否可行...
你自己的答案更接近了,但还不完全。使用类似于:
<VirtualHost *:80>
WSGIDaemonProcess temp user=temp group=temp home=/home/temp/app
Alias /temp/app /home/temp/app/start.wsgi
Alias /temp /home/temp/public_html
<Directory /home/temp/app>
WSGIProcessGroup temp
WSGIApplicationGroup %{GLOBAL}
Require all granted
Options ExecCGI
AddHandler wsgi-script .wsgi
</Directory>
</VirtualHost>
我正在尝试设置 Apache,以便:
- 如果用户转到
/temp
,则提供文件/home/temp/public_html/index.html
- 如果用户转到
/temp/app
然后我的 mod-wsgi/home/temp/app/start.wsgi
被执行
我目前有这个:
<VirtualHost *:80>
WSGIDaemonProcess temp user=temp group=temp home=/home/temp/app
WSGIScriptAlias /temp/app /home/temp/app/start.wsgi
Alias /temp /home/temp/public_html
<Directory /home/temp/app>
WSGIProcessGroup temp
WSGIApplicationGroup %{GLOBAL}
Require all granted
</Directory>
</VirtualHost *:80>
但奇怪的是 Alias
似乎优先于 WSGIScriptAlias
而 /temp/app
不起作用...
不是特别漂亮,但我(至少目前)是这样解决的:
<VirtualHost *:80>
WSGIDaemonProcess temp user=temp group=temp home=/home/temp/app
<Directory /home/temp/app>
WSGIProcessGroup temp
WSGIApplicationGroup %{GLOBAL}
Options ExecCGI MultiViews
MultiviewsMatch Handlers
AddHandler cgi-script .cgi
AddHandler wsgi-script .wsgi
Require all granted
</Directory>
Alias /temp /home/temp/app
</VirtualHost>
我没有使用 WSGIScriptAlias
,而是自动将其定义为 运行 .wsgi
个文件。 MultiViews
选项匹配 file
到 file.wsgi
.
此外,为了在我自己的脚本中隐藏扩展名,在每个 .wsgi
中我必须重新定义脚本文件名:
from server_public import app as _application # my flask app
# get rid of the .wsgi extension
def application(environ, start_response):
if environ['SCRIPT_NAME'].endswith('.wsgi'):
environ['SCRIPT_NAME'] = environ['SCRIPT_NAME'][:-5]
return _application(environ, start_response)
我还必须将我的 public_html/index.html
移动到 app/index.html
。
我更喜欢更简单的解决方案,我为 /temp
提供 index.html
,为 /temp/app
提供脚本别名...但不确定是否可行...
你自己的答案更接近了,但还不完全。使用类似于:
<VirtualHost *:80>
WSGIDaemonProcess temp user=temp group=temp home=/home/temp/app
Alias /temp/app /home/temp/app/start.wsgi
Alias /temp /home/temp/public_html
<Directory /home/temp/app>
WSGIProcessGroup temp
WSGIApplicationGroup %{GLOBAL}
Require all granted
Options ExecCGI
AddHandler wsgi-script .wsgi
</Directory>
</VirtualHost>