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... но не уверен, что это возможно...

Другие вопросы по тегам