我正在将我的 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。将修复程序纳入稳定版本需要社区的一些意见。