Я передаю свои файлы php в php5-fpm в моем файле Apache .conf, однако при перезапуске сервера Apache я получаю сообщение об ошибке:
Имя исполнителя ProxyPass (fcgi: //127.0.0.1: 9000 / home / averyverylong / Directoryname / tothe / www / working / directory / $ 1) слишком длинное.
Я передаю файлы php в php-fpm через:
ProxyPassMatch ^/(.*\.php(/.*)?)$ \
fcgi://127.0.0.1:9000/home/averyverylong/directoryname/tothe/www/working/directory/$1
Очевидно, что если я сокращу имя каталога, он будет работать нормально. Однако на самом деле это не вариант.
Запуск: Apache / 2.4.10 (Ubuntu 14.04) PHP5-FPM
Я в тупике и потратил весь день, пытаясь найти обходной путь. Мои навыки сервера не самые сильные, я буду очень благодарен за любую обратную связь.
Альтернативным (и, на мой взгляд, более элегантным) решением было бы использование RewriteEngine, как обсуждается в этом отчете об ошибке Apache. https://bz.apache.org/bugzilla/show_bug.cgi?id=53218
# This directive must come before the following one in order
# block access to arbitrary URIs on the origin server!
# As an alternative one can also use "RewriteRule /UNUSED - [F]"
ProxyPass /UNUSED !
# Configure a connection pool for the origin server
# http://myserver.example.org:9081
ProxyPass /UNUSED fcgi://127.0.0.1:9000
RewriteEngine On
# Proxy "/long" to a long URI on the origin server,
# [P] flag at end of line is important
RewriteRule ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/home/averyverylong/directoryname/tothe/www/working/directory/$1 [P]
Это позволяет вам продолжать использовать ту же файловую структуру без накладных расходов на создание везде символьных ссылок вручную (что также не будет работать на машинах Windows). Я считаю, что в будущей версии Apache будет повышено ограничение на имя воркера, но на данный момент этот обходной путь должен дать вам желаемый результат.
Согласно документации Symfony в apache> = 2.4.9 вы можете использовать
<FilesMatch \.php$>
# 2.4.10+ can proxy to unix socket
# SetHandler "proxy:unix:/var/run/php5-fpm.sock|fcgi://localhost/"
# Else we can just use a tcp socket:
SetHandler "proxy:fcgi://127.0.0.1:9000"
</FilesMatch>
http://symfony.com/doc/current/cookbook/configuration/web_server_configuration.html#php-fpm-with-apache-2-2
https://serversforhackers.com/video/apache-and-php-fpm
В качестве обходного пути вы можете создать символическую ссылку с более коротким именем на более длинный путь. Например:
ln -s /home/averyverylong/directoryname/tothe/www/working/directory \
/var/www/html/shortcut
Затем используйте
ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/var/www/html/shortcut
Сообщение об ошибке для Ubuntu. Укажите, что вас затронула проблема, и запросите обновление для Trusty. Включение исправления в стабильный выпуск потребует некоторого участия сообщества.