Apache ProxyPass 工作器名称太长

Apache ProxyPass 工作器名称太长

我正在将我的 php 文件传递​​给 Apache .conf 文件中的 php5-fpm,但是重新启动 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

我对此感到困惑,花了一整天时间试图找到解决方法。我的服务器技能不是很强,任何反馈都将不胜感激。

答案1

作为一种解决方法,您可以创建一个名称较短的符号链接到较长的路径。例如:

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

答案2

另一种(我认为更优雅的)解决方案是使用 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 的未来版本中会提高工作者名称限制,但目前这种解决方法应该可以为您提供所需的结果。

答案3

根据 apache >=2.4.9 中的 symfony 文档,您可以使用

<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

答案4

Ubuntu 的错误已归档。请指出您受到影响并请求更新 Trusty。将修复程序纳入稳定版本需要社区的一些意见。

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

相关内容