Я настроил перенаправление на моем виртуальном хосте 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. Его комментарий был тем, что направило нас на правильный путь.