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

Слишком длинное имя рабочего Apache ProxyPass

Я передаю свои файлы 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. Включение исправления в стабильный выпуск потребует некоторого участия сообщества.

https://bugs.launchpad.net/apache2/+bug/1668474