Apache-2.2
通過 htaccess/apache 代理對子域的所有請求到一個 ip
假設我有以下具有自己的文件根等的子域:
monad2.mysite.com
我希望所有請求都代理到一個 IP(例如
193.159.3.129
),但它們必須通過伺服器mysite.com
(假設monad2
在同一台伺服器上)。我有以下(htaccess)配置,它適用於子域,但無法代理任何其他請求……
Options +FollowSymLinks RewriteEngine on RewriteRule (.*) http://193.159.3.129/$1 [P]
我的問題是,雖然它適用於
http://monad2.mysite.com/a.php
(url 保持不變),但它不適用於(http://monad2.mysite.com/a/b
url 轉換為http://193.159.3.129/a/b
)之類的請求。請注意,後一個地址顯示了代理伺服器的目錄列表,這是正確的,只是子域更改為 ip。另外,我認為這個系統肯定不適用於 HTTPS 請求,對嗎?
**編輯:**經過更多的故障排除後,我確切地找到了問題的發生時間。每當我嘗試訪問沒有最後斜線的目錄時,代理就會失敗,我最終會得到一個 IP。一些例子:
Original | Result --------------------------------+-------------------------------- http://monad2.mysite.com | http://monad2.mysite.com http://monad2.mysite.com/a/ | http://monad2.mysite.com/a/ http://monad2.mysite.com/a | http://193.159.3.129/a/ <- ! http://monad2.mysite.com/a.php | http://monad2.mysite.com/a.php
您需要
ProxyPassReverse
- 它擷取Location
響應標頭中的欄位並更改它們,以便客戶端將繼續與代理對話,而不是與後端伺服器對話。
ProxyPass
並且ProxyPassReverse
不能在.htaccess
文件中 - 所以用這個替換你目前的重寫規則,它應該進入你<VirtualHost>
的子域塊:ProxyPass / http://193.159.3.129/ ProxyPassReverse / http://193.159.3.129/
.htaccess
順便說一句:在可以避免的情況下不要使用。查看有關此事的 Apache 文件。通常,當您無權訪問主伺服器配置文件時,您應該只使用 .htaccess 文件。