апачские 2.4, mod_proxy_fcgi не соблюдающий .htaccess, работают вокруг необходимого

Я использую апачские 2.4.7 с mod_proxy_fcgi ради прохождения php к php-fpm (это будет использоваться для общей среды хостинга). htaccess хорошо работает для не php файлы, но после того как он совершил нападки, переписывают правило, что прокси через запросы php, htaccess проигнорирован.

Я знаю, почему это происходит. Вопрос: как я работаю вокруг этого?

Вопрос, как я вынуждаю апача рассматривать запрос в php файл как запрос в локальный файл и затем проксировать его через?

Я провел существенное время в исследовании на этой проблеме, и после "ответов" были даны как решение:

1) "используйте апачскую конфигурацию вместо .htaccess", это - допустимое решение, но не для общей среды хостинга (я не собираюсь предоставлять доступ к апачской конфигурации общим клиентам хостинга ;)).

2) "не используйте .htaccess, поскольку он имеет проблемы performance/security/other", хорошо, как еще был бы совместно использованные клиенты хостинга управлять перезаписью доступа/URL на своем сайте? Кроме того того, если бы .htaccess не был требованием, то я просто использовал бы nginx.

3) "помещенный переписывают правило для прокси в" - это неправильно, и это не работает.

Это поведение, кажется, не ошибка, а "функция" согласно https://issues.apache.org/bugzilla/show_bug.cgi? id=54887

3
задан 9 July 2014 в 02:27
5 ответов

EDIT:

Реальным решением этой проблемы является не помещение правила перезаписи для прокси в php-fpm, а выполнение следующего:

RewriteCond %{REQUEST_URI} -U
RewriteRule (.*\.php)$ fcgi://IP:PORT/$1 [P,L]

Вне тегов и внутри тегов.

Так как оригинальное решение имело проблему: если бы существовали "RewriteEngine On" или любые связанные с "RewriteRule" правила/условия, это заставило бы Apache полностью игнорировать правила перезаписи внутри тегов в основном конфигурационном файле.

Ниже не совсем верно

Я обнаружил, что ошибался, когда не работал внутри тега.

RewriteMap and standard rewrite lookup of the user dirs goes here

<Directory /PATH_TO_WWW/*>
      Standard directory conf goes here

      RewriteRule ^(.*\.php)$ fcgi://IP_OF_THE_FPM:FPM_PORT/$1 [P,L]

</Directory>

В основном секрет (по крайней мере, для меня) в том, что мне нужно было поместить перезаписывающее правило, которое проксирует внутри тегов каталогов, которые предназначены для общего каталога пользователей с *.

так что если у меня есть пользователи в /var/www/$username, тег каталога должен выглядеть так:

TL;DR: используйте правило rewirte прокси внутри тегов каталога для общей директории пользователей.

.
-1
ответ дан 3 December 2019 в 06:07

Появляется вы передаете все свои php-выполнения на ваш быстрый cgi-сервер, который не знает, как использовать htaccess, поэтому он игнорирует эти файлы. Если вам нужно использовать htaccess файлы от Apache, то вам нужно выполнять php скрипты от Apache (т.е. используя mod_php) вместо того, чтобы передавать выполнение другому сервису, который понятия не имеет о htaccess.

Вы можете переделать правила перезаписи, но так как они контролируются пользователем, то вы ничего не можете с этим поделать.

.
1
ответ дан 3 December 2019 в 06:07

Остерегайтесь, что RewriteCond -U будет проверять правильность URI перед выполнением действительного перенаправления, поэтому удваивайте каждый запрос! это может серьезно повлиять на производительность, Особенно на сильно загруженных сайтах.

Предлагаю проверить "RewriteOptions InheritBefore", которая, кажется, решает любую проблему, связанную с наследованием htaccess, как описано здесь:

Понимание apache 2.4 mod_proxy_fcgi и RewriteRules в htaccess

Спасибо, Джорджо

2
ответ дан 3 December 2019 в 06:07

думаю, это самый чистый метод, без каких-либо уродливых переписей в apache config:

<VirtualHost IP:80>
    ServerName domain.tld
    ServerAlias www.domain.tld
    DocumentRoot /var/www/project/web

    <FilesMatch \.php$>
        SetHandler proxy:fcgi://127.0.0.1:9000
    </FilesMatch>

    <Directory /var/www/project/web>
        AllowOverride All
    </Directory>
</VirtualHost>
0
ответ дан 3 December 2019 в 06:07

Тем временем, начиная с версии Apache 2.4.10, доступен еще один вариант: Proxy through Handler. Смотрите пример в документации Apache: mod_proxy_fcgi examples

Вы также можете принудительно обработать запрос как обратный прокси-запрос, создав подходящий проход обработчика. В приведенном ниже примере конфигурация будет передавать все запросы PHP-скриптов на указанный FastCGI сервер, используя обратный прокси. Эта возможность доступна в HTTP-сервере Apache 2.4.10 и более поздних версиях. По причинам производительности, вы захотите определить работника, представляющего тот же fcgi:// бэкэнд. Преимущество этой формы в том, что она позволяет обычному отображению URI для имени файла происходить на сервере, а результат локальной файловой системы передается бэкенду. Когда FastCGI настроен таким образом, сервер может вычислить наиболее точный PATH_INFO. Это позволяет RewriteRules и аутентификацию в файлах .htaccess. После того, как все перезаписывается, запрос передается на php-fpm.

.
2
ответ дан 3 December 2019 в 06:07

Теги

Похожие вопросы