Apache-2.2
Apache:使用帶有 mod FastCGI 的 Alias 指令
伺服器配置為使用 fastcgi 處理 php 文件:
<IfModule mod_fastcgi.c> AddHandler application/x-httpd-php .php Action application/x-httpd-php /fcgi-bin/php-fpm virtual ScriptAlias /fcgi-bin/php-fpm /fcgi-extsrvs-phpfpm <Location "/fcgi-bin/php-fpm"> Order Deny,Allow Deny from All Allow from env=REDIRECT_STATUS </Location> </IfModule>
然後定義一個虛擬主機來使用這個 fastcgi :
<VirtualHost *:80> ServerName mydomain.org DocumentRoot /var/www/mydomain.org <Location /> Order Allow,Deny Allow from All AllowOverride None </Location> <IfModule mod_fastcgi.c> # use the socket as defined for this pool FastCgiExternalServer /fcgi-extsrvs-phpfpm -socket /var/run/php5-fpm/mydomain.org.sock </IfModule> # problem here AliasMatch ^/(.*) /var/www/mydomain.org/index.php </VirtualHost>
一切正常,直到我添加 AliasMatch 行(與 Alias 相同的問題)。目標是使用 index.php 腳本處理每個請求。這會導致以下日誌出現 500 錯誤:
[error] [client 88.xxx.xxx.20] Request exceeded the limit of 10 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace. [debug] core.c(3112): [client 88.xxx.xxx.20] r->uri = /fcgi-bin/php-fpm/fcgi-bin/php-fpm/fcgi-bin/php-fpm/fcgi-bin/php-fpm/fcgi-bin/php-fpm/fcgi-bin/php-fpm/fcgi-bin/php-fpm/fcgi-bin/php-fpm/fcgi-bin/php-fpm/fcgi-bin/php-fpm/ [debug] core.c(3118): [client 88.xxx.xxx.20] redirected from r->uri = /fcgi-bin/php-fpm/fcgi-bin/php-fpm/fcgi-bin/php-fpm/fcgi-bin/php-fpm/fcgi-bin/php-fpm/fcgi-bin/php-fpm/fcgi-bin/php-fpm/fcgi-bin/php-fpm/fcgi-bin/php-fpm/ ... [debug] core.c(3118): [client 88.xxx.xxx.20] redirected from r->uri = /fcgi-bin/php-fpm/ [debug] core.c(3118): [client 88.xxx.xxx.20] redirected from r->uri = /
我的猜測是 ScriptAlias 和 AliasMatch 之間存在衝突,但我不知道如何解決它。
她是一個類似問題的解決方案 http://www.tokiwinter.com/avoiding-infinite-recursion-with-mod_rewrite-and-mod_fastcgi/ TL;DR 使用 mod_rewrite 並禁用重寫 php 腳本 url
但我強烈建議轉移到 apache2.4 並使用 mod_proxy_fcgi https://httpd.apache.org/docs/2.4/mod/mod_proxy_fcgi.html你可以
<FilesMatch "\.php$"> SetHandler "proxy:unix:/var/run/php5-fpm/mydomain.org.sock|fcgi://host1/" </FilesMatch>
有了所有重定向,重寫應該按預期工作。順便說一句 mod_fastcgi 已經過時,而且醜陋。如果您更喜歡使用 2.2(現在已停產),您可以嘗試https://github.com/lazy404/mod_fastcgi_handler(我在繁忙的 php-fpm 站點上使用它沒有任何問題)它的配置也很乾淨並與重定向兼容。