Apache:使用 Alias 指令和 mod FastCGI

Apache:使用 Alias 指令和 mod FastCGI

服务器配置为使用 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 之间存在冲突,但我不知道如何解决它。

答案1

这是解决类似问题的方法 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 没有任何问题)它的配置也很干净并与重定向兼容。

相关内容