Apache-2.2

apache - mod_rewrite + mod_proxy 在暫存中工作,而不是在生產中工作(磷磷P選項被忽略)

  • February 29, 2012

我在我的 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 question 的更多資訊

問題是,雖然它在我的暫存環境中執行良好,但在生產環境中卻不行!

兩台伺服器都是 Ubuntu 伺服器 10.04 。Apache 來自標準的 ubuntu 儲存庫,使用apt-get install.

我對整個 /etc/apache2/ 目錄進行了比較,唯一的區別是伺服器名稱。

如果我將最後一個選項更改為

$$ L $$,我得到一個重定向,所以這讓我認為 mod_rewrite 正在工作。它只是不與 mod_proxy 對話。 通過查看日誌(/var/log/apache2和 rails 日誌),似乎生產中的重寫規則只是被忽略了 - 日誌與它不存在時完全相同。

我該如何調試呢?我可以強制 Apache 向我提供更多資訊,說明為什麼在我訪問時不執行此特定規則/proxy嗎?

在按照 larsks 的建議瀏覽 RewriteLog 之後,我們意識到 Apache 確實在進行重定向 - 問題出在其他地方。

事實上,它就是我們用來處理 ruby​​ 的模組 - Phusion Passenger

我們有一個“天哪,伺服器宕機了!” 我們嘗試將PassengerHighPerformance變數設置為on。

不幸的是,這個設置基本上意味著“忽略 mod_rewrite”:)

現在我們對它進行了一些調整 - 它在所有位置都打開,除了它們從以下位置開始時/proxy

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

一旦我們將該配置選項添加到我們的虛擬主機配置文件中,事情又開始工作了!

如果您通過 google 來到這裡並發現這很有用,請支持 Larsks 對 OP 的評論。他的評論使我們走上了正軌。

引用自:https://serverfault.com/questions/364471