Попытка использовать mod_wsgi в режиме демона показывает apache по умолчанию Это работает! страница вместо приложения

У меня есть приложение Python WSGI, которое я написал и работает с apache2 + mod_wsgi во встроенном режиме, и я пытаюсь заставить его работать в режиме демона.

Проблема в том, что с конфигурацией (ниже) вместо приложения я вижу Apache2 по умолчанию "Это работает!" страница, которая, несмотря на рвение, с которым она заявляет о своем рабочем статусе, неверна.

Я только продезинфицировал имя приложения, URL-адреса и т. д., поэтому вы видите всю конфигурацию Apache, которую я использую.

<VirtualHost *:80>
  ServerName app.example.com
  ServerAlias app

  WSGIDaemonProcess appname user=www-data group=www-data processes=5 threads=5 display-name=%{GROUP} maximum-requests=1000
  WSGIScriptAlias / /usr/share/app/app/application.wsgi

  Alias /static /usr/share/app/app/static

  ErrorLog /var/log/apache2/app/error.log
  CustomLog /var/log/apache2/app/access.log common

<Directory /usr/share/app/app>
    WSGIProcessGroup appname
    Order allow,deny
    Allow from All
</Directory>

<Directory /usr/share/app/app/static>
    Order allow,deny
    Allow from All
</Directory>
</VirtualHost>

Независимо от того, поместил ли я параметр WSGIProcessGroup в раздел или только в основной раздел, это все равно просто показывает «Это работает!» страница.

Приложение использует бутылки и toscawidgets с валидатором wsgi, чтобы убедиться, что все работает правильно. Код, который я использую для создания приложения:

import bottle
import tw.api
from wsgiref.validate import validator
#.... A whole buttload of code
application = bottle.default_app()
application = tw.api.make_middleware(application, stack_registry=True)
application = validator(application)

Редактировать: я также хотел бы отметить, что у меня была эта проблема как в mod_wsgi 2.8 с Python 2.6.5, так и в mod_wsgi 3.3 с Python 2.7.3.

Редактировать 2: Псевдоним для /static/ все еще работает, поэтому я, похоже, все еще нажимаю VirtualHost. Если я закомментирую директиву WSGIProcessGroup и перезапущу apache, он будет работать нормально, но во встроенном режиме, а не в режиме демона.


person Brett Wilkins    schedule 08.05.2012    source источник
comment
Вы читали Это работает! страница?   -  person Ignacio Vazquez-Abrams    schedule 08.05.2012


Ответы (2)


Похоже, что в частях конфигурации mod_wsgi нет ничего особенного, за исключением того, что:

user=www-data group=www-data

является избыточным, поскольку по умолчанию он будет работать с пользователем Apache, поэтому их не нужно устанавливать явно. Использование максимальных запросов также не рекомендуется, если у вас нет особой необходимости.

Основная проблема, скорее всего, в том, что все ваше определение VirtualHost не используется.

Добавьте синтаксическую ошибку в VirtualHost, чтобы увидеть, читается ли Apache. Добавления строки с «xxx» будет достаточно, чтобы вызвать синтаксическую ошибку.

Если читается, вам нужно посмотреть, включены ли именованные виртуальные хосты. Т.е. существует ли соответствующая директива NameVirtualHost.

Следующая проблема заключается в том, действительно ли имя хоста, данное ServerName, заканчивается в Apache. Вы, очевидно, не владеете app.example.com, но то, что вы действительно используете, на самом деле идет к этому Apache. Выключите Apache и повторите попытку. Если не можете связаться с ним, то это, вероятно, правильно, по крайней мере.

После этого вам нужно убедиться, что у вас нет существующего VirtualHost, который также пытается обслуживать то же имя сервера.

person Graham Dumpleton    schedule 08.05.2012
comment
Спасибо Грэм. Как я только что упомянул во втором своем редактировании, псевдоним /static/ выполняет свою работу, поэтому VirtualHost определенно доступен. - person Brett Wilkins; 08.05.2012
comment
Установите для LogLevel значение «info», а не «warn» по умолчанию, и посмотрите, какие сообщения выводит mod_wsgi. - person Graham Dumpleton; 08.05.2012

Я подозреваю, что вы вообще не используете этот VirtualHost. У вас где-нибудь есть «NameVirtualHost *: 80»? Вы на самом деле заходите на сайт через app.example.com или имена приложений?

person mwhudson    schedule 08.05.2012
comment
Привет, Майкл, псевдоним для /static/ все еще работает, поэтому я, похоже, все еще нажимаю VirtualHost. Если я закомментирую директиву WSGIProcessGroup и перезапущу apache, он будет работать нормально, но во встроенном режиме (конечно). - person Brett Wilkins; 08.05.2012
comment
А NameVirtualHost *:80 находится в /etc/apache2/ports.conf. - person Brett Wilkins; 08.05.2012
comment
Я знаю, что это старо, но почему это ответ? Как это что-то решает? - person Craicerjack; 10.12.2015