Здравствуйте. Имеется указанная выше связка. uwsgi запущен на socket = 127.0.0.1:9093 с plugin = php54.
Если я в конфигурации виртуалхоста задаю
ProxyPass / uwsgi://127.0.0.1:9093/
uwsgi получает запрос (например, GET /phpinfo.php) и выполняет его без ошибок (в логе error_log виртуалхоста пусто). При этом в логах uwsgi образуется строка:
[pid: 6746|app: -1|req: -1/49] 2002:.... () {54 vars in 1068 bytes} [Wed Jun 19 22:46:38 2013] GET /phpinfo.php => generated 58540 bytes in 13 msecs (HTTP/1.1 200) 2 headers in 82 bytes (0 switches on core 0)
и ещё две похожих строки — лого php из phpinfo.
Но если задать в виртуалхосте вместо ProxyPass директиву
ProxyPassMatch ^/(.*)$ uwsgi://127.0.0.1:9093/$1
что (согласно документации Apache) совершенно то же самое, что и выше, то происходит странное: в error_log виртуалхоста появляется строка
[Wed Jun 19 20:08:59 2013] [error] [client 2002:...] URL uwsgi://127.0.0.1:9093/phpinfo.php: proxy:reverse proxy:uwsgi://127.0.0.1:9093/phpinfo.php .0.1:9093/phpinfo.php
а в логах uwsgi —
[pid: 6018|app: -1|req: -1/31] 2002:.... () {50 vars in 1040 bytes} [Wed Jun 19 19:58:15 2013] GET /phpinfo.php => generated 0 bytes in 0 msecs (HTTP/1.1 404) 0 headers in 61 bytes (0 switches on core 0)
Пробовал задавать uwsgi опции типа php-*, например, php-docroot, не помогает.
(на адрес клиента внимание не обращаем — ipv6)
Вообще ProxyPassMatch предполагалось использовать с выражением ^/(.*\.php)$, чтобы передавать uwsgi только запросы к php.
И в том, и в другом случае конфгиурация uwsgi идентичная (и он вообще не перезапускался), и судя по логу, запрос от апача к нему приходит одинаковый (GET /phpinfo.php). Но почему в первом случае он находит файл и выполняет его, а во втором нет? В чём разница вообще для uwsgi, каким способом на него завернули запрос? Как сделать, чтобы поведение uwsgi не зависело от конфигурации apache? Как всё это отлаживать?
P.S. Сразу хочу предупредить: не надо предлагать использовать nginx и так далее. Для этого всё и делается, но нельзя просто так взять и заменить вебсервер. Стратегия перехода выбрана такая: постепенно переключать виртуалхосты на uwsgi, а когда mod_php останется в прошлом, уже реально будет резко заменить apache на nginx. И для этого сейчас нужно именно завести uwsgi с apache.