Acache: несовместимость wsgi и псевдонимов
Я пытаюсь настроить Apache так, чтобы:
- если пользователь идет в
/temp
тогда файл/home/temp/public_html/index.html
подается - если пользователь идет в
/temp/app
тогда мой мод-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
не работает...
2 ответа
Вы подошли ближе в своем собственном ответе, но не совсем. Используйте что-то вроде:
<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>
Не особенно красиво, но я (по крайней мере, пока) решил это так:
<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
,
Я бы предпочел более простые решения, где я служил index.html
за /temp
и псевдоним сценария для /temp/app
... но не уверен, что это возможно...