Назад | Перейти на главную страницу

mod_fcgid + Python + Apache 2.2 / RHEL 5: вывод в error_log, а не в браузер

Я пытаюсь получить Django + mod_fcgid настройка работает (mod_wsgi сложен, так как у меня есть статически связанный Python. Не спрашивайте.) Хотя это было тривиально для моей системы разработки Mac OS X, запустить ее на сервере до сих пор было невозможно.

С этой конфигурацией

LoadModule fcgid_module modules/mod_fcgid.so

FCGIDSocketPath run/mod_fcgid
FCGIDSharememPath run/mod_fcgid/fcgid_shm

ScriptAliasMatch  /apps/([^/]+)(/.*)? /var/www/apps/$1/apache/dispatch.fcgi$2

<DirectoryMatch ^/var/www/apps/([^/]+)/apache>
  SetHandler fcgid-script
  Order allow,deny
  Allow from all
  Options +ExecCGI
</DirectoryMatch>

и этот пример dispatch.fcgi:

#!/usr/bin/python
import sys

sys.path.insert(0, '/var/www/lib/python2.5/site-packages/flup-1.0.2.egg')

def myapp(environ, start_response):
    start_response('200 OK', [('Content-Type', 'text/plain')])
    return ['This is my hello world test!\n']

if __name__ == '__main__':
    from flup.server.fcgi import WSGIServer
    WSGIServer(myapp).run()

Просмотр моей тестовой страницы дает ошибку 500, и в моих журналах ошибок Apache я получаю:

WSGIServer: missing FastCGI param REQUEST_METHOD required by WSGI!
WSGIServer: missing FastCGI param SERVER_NAME required by WSGI!
WSGIServer: missing FastCGI param SERVER_PORT required by WSGI!
WSGIServer: missing FastCGI param SERVER_PROTOCOL required by WSGI!
Status: 200 OK
Content-Type: text/plain
Content-Length: 29

This is my hello world test!
[Wed Sep 30 11:09:18 2009] [notice] mod_fcgid: process /var/www/apps/test/apache/dispatch.fcgi(31043) exit(server exited), terminated by calling exit(), return code: 0

Вот мой результат, отлично выглядит - кроме журнала ошибок Apache, а не окна моего браузера.

Когда я удаляю свой SetHandler директива, вывод идет именно там, где я хочу; очевидно, он работает в обычном режиме CGI. Это недостаточно эффективно для моего приложения Django, которое в этой конфигурации загружает страницу 1-2 секунды.

Пока что я пробовал:

Кажется, ничего не меняет, за исключением того, что использование AliasMatch показывает мне источник, чего я и ожидал.

Опять же, это было абсолютно тривиально в Mac OS X. Это просто работает с сопоставимой конфигурацией.

Помимо получения лучшего Python и использования mod_wsgi (что возможно, если больно), как мне заставить его работать?

Проблема: какая-то политика SELinux. Я недостаточно эксперт, чтобы диагностировать это, но делаю:

/usr/sbin/setenforce 0

заставляет все работать как шарм.