Apache-2.2

Apache:使用帶有 mod FastCGI 的 Alias 指令

  • August 12, 2021

伺服器配置為使用 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 站點上使用它沒有任何問題)它的配置也很乾淨並與重定向兼容。

引用自:https://serverfault.com/questions/511672