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

apache - mod_rewrite + mod_proxy работает в промежуточном режиме, не работает в продакшене (опция [P] игнорируется)

Я настроил перенаправление на моем виртуальном хосте Apache, обслуживающем несколько поддоменов - назовите их a.example.com и b.example.com - обслуживая приложение ruby ​​on rails.

В моем конфигурационном файле виртуального хоста есть это правило:

rewriteEngine on
rewriteRule proxy/(.+)$ http://news.example.com/$1 [P]

Идея в том, что я могу http://a.example.com/proxy/news/a и получить содержимое http://news.example.com/news/a, но в том же субдомене, поэтому ajax не считает, что мои запросы ajax являются междоменными - больше информации по этому вопросу SO.

Проблема в том, что, хотя он отлично работает в моей тестовой среде, он не работает в производственной среде!

Оба сервера - это сервер Ubuntu 10.04. Apache пришел из стандартных репозиториев ubuntu, используя apt-get install.

Я сделал различие всего / etc / apache2 / dir, и единственная разница - это имя сервера.

Если я изменю последний параметр на [L], я получу перенаправление, поэтому я думаю, что mod_rewrite работает. Он просто не работает с mod_proxy.

Глядя на журналы (/var/log/apache2 и журнал рельсов), похоже, что правило перезаписи в производственной среде просто игнорируется - журналы в точности такие же, как если бы его там не было.

Как я могу это отладить? Могу ли я заставить Apache предоставить мне дополнительную информацию о том, почему это конкретное правило не применяется, когда я получаю доступ /proxy?

После просмотра RewriteLog, как предполагал ларск, мы поняли, что Apache действительно выполнял перенаправления - проблема была где-то в другом месте.

Фактически, это был модуль, который мы использовали для обработки рубина - Пассажир Phusion.

У нас был один из тех «Боже, сервер не работает!» моменты, и мы попытались настроить Пассажирский переменная включена.

К сожалению, эта настройка в основном означает "игнорировать mod_rewrite" :)

Теперь мы немного отключили его - он включен во всех локациях, кроме тех случаев, когда они начинаются с /proxy:

PassengerHighPerformance On
...
<location /proxy>
  PassengerHighPerformance Off
</location>

Как только мы добавили этот параметр конфигурации в наш файл конфигурации виртуального хоста, все снова заработало!

Если вы пришли сюда через Google и нашли это полезным, проголосуйте за комментарий Ларскса к OP. Его комментарий был тем, что направило нас на правильный путь.