Назад | Перейти на главную страницу

Apache: использование директивы Alias ​​с модом FastCGI

Сервер настроен на обработку файлов php с помощью fastcgi:

<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 и отключение перезаписи для URL-адреса скрипта php

Но я настоятельно рекомендую перейти на 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 (которая сейчас EOL), вы можете попробовать https://github.com/lazy404/mod_fastcgi_handler (Я без проблем использую его на загруженном сайте с php-fpm) его конфигурация также чистая и совместима с перенаправлениями.