2016-10-10 16 views
0

Я пытаюсь настроить Apache так, что:Acache: WSGI и псевдоним Несовместимость

  • , если пользователь переходит на /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, кажется, берет predence над WSGIScriptAlias и /temp/app не работает ...

+0

Для начала чтения http://modwsgi.readthedocs.io/en/develop/user-guides/configuration-guidelines.html Из-за того, что Apache старшинства навязывает вы не можете использовать '' WSGIScriptAlias'' в конкретном сценарии, который вам нужен, но для приложения WSGI вам нужно будет использовать '' Alias'' и '' AddHandler''. –

+0

@GrahamDumpleton Спасибо :) Еще не сигара ... Даже после определения 'Alias' после' WSGIScriptAlias' мой '/ temp/app' не работает. Я обновил свой пост ... –

+0

Кстати, я смог заставить его работать с помощью 'AddHandler'. Проблема в том, что мне кажется, что мне нужно будет использовать «Rewrite», чтобы избавиться от расширений .wsgi. Я бы предпочел просто использовать 'WSGIScriptAlias' ... –

ответ

1

Вы стали ближе в собственном ответе, но не совсем. Используйте что-то вроде:

<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> 
+0

О, это было умно! Позвольте мне попробовать, а затем я отметю это ... –

+0

Это работает без всех хаков, чтобы скрыть расширение, так как Alias ​​позаботится об этом. Простой и блестящий! Спасибо огромное! –

0

Не особенно красивая, но я (по крайней мере на данный момент) решается это следующим образом:

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

 Смежные вопросы

  • Нет связанных вопросов^_^