2016-12-02 52 views
0

我配置了我的apache,以便它可以將我的請求轉發到外部URL,如google.com,但反向代理不起作用。反向代理外部URL - Apache

<VirtualHost *:443> 
ServerName authtest.com 
ProxyRequests Off 
ProxyPreserveHost On 
<Proxy *> 
    Order allow,deny 
    Allow from All 
</Proxy> 
<LocationMatch "/google"> 
    ProxyPass https://www.google.com/ 
    ProxyPassReverse https://www.google.com/ 
</LocationMatch> 
</VirtualHost> 

是否有可能爲我反轉代理外部網站?

回答

1

是否有可能爲我反向代理外部網站?

是的,但有明顯的缺點。

注意:當我嘗試您的配置時,我在日誌中獲得了SSL Proxy requested for [...] but not enabled [Hint: SSLProxyEngine],因此我添加了SSLProxyEngine on

主機問題

當你犯了一個HTTP/1.1請求到服務器時,會自動在請求中添加主機名。當您代理他們,你有兩個possibilites:

[browser] --(Host: authtest.com)--> [apache proxy] --(Host: authtest.com)--> Google 

[browser] --(Host: authtest.com)--> [apache proxy] --(Host: google.com)--> Google 

第一個就是你ProxyPreserveHost On得到。谷歌服務器不會處理authtest.com的請求,你應該刪除這一行。

即使在第二種情況下,您也可能遇到問題。 ProxyPassReverse將處理重定向,但只針對給定的域:我在法國,google.com將我重定向到google.fr(不同的域),反向代理不重寫重定向。

另一個問題是引用者:如果服務看到來自不同網站的圖像/ css/js的請求,它可能會將其視爲帶寬泄漏並阻止它們。現在,您還需要重寫響應的HTML(mod_proxy_html將有所幫助,但它不是銀色子彈)。

路徑問題

在你的榜樣,你代理<authtest> /谷歌向谷歌< > /。像上面一樣,你需要重寫html:絕對鏈接/資源將無法工作,除非你的服務器在每個地方添加/google。相同的鏈接/資源也是如此(但邊緣情況更多)。如果您擁有後端服務器,則可以在html/css/js文件中檢查url。在這裏,如果url是使用js在瀏覽器中動態構建的,那麼您無法執行任何操作。

如果你可以代理//(或/whatever/whatever),你會避免很多問題在這裏。

+0

謝謝你這麼多的詳細說明。在我的項目中,Iam代理使用相同的域名,即authTest,但是不同的位置,如/ google到google.com和/ fb到facebook,傳遞了幾個webistes。所以有我遇到問題的時候。 – user7044932

0

再檢查一下這個GIT Repo 我分叉一個GIT回購和定製它與工作情景:

[browser] --(Host: google.local)--> [apache proxy] --(Host: google.nl)--> Google 

Apache的配置如下:

<VirtualHost *:80> 
     ServerName google.local 
    SSLProxyEngine on 
    ProxyRequests Off 
    <Proxy *> 
     Order allow,deny 
     Allow from All 
    </Proxy> 
     ProxyPass/https://www.google.nl/ 
     ProxyPassReverse/https://www.google.nl/ 

     ErrorLog /var/log/apache2/google.local-error.log 
     CustomLog /var/log/apache2/google.local-access.log combined 

</VirtualHost> 
+0

謝謝你的迴應。它沒有工作在我的情況下,因爲Iam尋找/谷歌谷歌。 – user7044932