2017-09-06 185 views
0

我正在嘗試配置Apache服務器以使2個子域使用反向代理。我可以將流量重定向到第一個子域(first.example.com),併成功從https站點檢索內容。但是,每當我嘗試訪問第二個子域時,我最終都會從第一個子域中獲取內容,並且由於路由與我的本地網站不匹配,所以我找到了一個未找到的頁面。Apache反向代理配置 - 子域名

我想知道我可以從當前配置中調整什麼,以便我可以從我的本地主機站點獲取內容。

這裏是我當前的配置:

<Proxy *> 
Require all granted 
</Proxy> 

SSLProxyEngine On 
ProxyRequests Off 
SSLProxyCheckPeerCN off 
SSLProxyCheckPeerExpire off 
SSLInsecureRenegotiation on 
SSLProxyVerify none 
SSLVerifyClient none 
SSLProxyCheckPeerName off 

<VirtualHost first.example.com:80> 
    ServerName first.example.com 
    ProxyPass /first https://stackoverflow.com 
    ProxyPassReverse /first https://stackoverflow.com 
    ProxyPassMatch ^/(.*)$ https://stackoverflow.com/$1 

</VirtualHost> 

<VirtualHost second.example.com:80> 
    ServerName second.example.com 
    ProxyPass /site http://localhost/site 
    ProxyPassReverse /site http://localhost/site 
    ProxyPassMatch ^/(.*)$ http://localhost/site/$1 
</VirtualHost> 

非常感謝你提前!

最好的問候!

EdgarMartínez。

回答

0

您當前的配置與自身衝突。 ProxyPassProxyPassMatch做同樣的事情(在正則表達式中),但你用不同的規則聲明它。

ProxyPass /site http://localhost/site 

法則說:任何人訪問http://second.example.com/site將從http://localhost/site送入內容。如果您訪問http://second.example.com/foo,您什麼也得不到。

匹配線

ProxyPassMatch ^/(.*)$ http://localhost/site/$1 

法則說:任何人都該訪問http://second.example.com/site將從http://localhost/site/site送入內容。如果您訪問http://second.example.com/foo,則會得到http://localhost/site/foo

如果您使用Match版本(正則表達式),對於沒有正則表達式版本的反向規則而言,您的運氣也不好。雖然,我不確定你是否真的需要反向規則。

至於爲什麼你的第二個請求得到了第一個結果...我不知道。

+0

你好@Grumpy, 你說得對,我的配置與自身衝突。 這是我如何改變它: '了NameVirtualHost *:80' '<虛擬主機*:80>'' 服務器名first.example.com' '的DocumentRoot 「F:/根/ HTMLDOCS」'' ' '<虛擬主機*:80>'' ProxyPreserveHost on' '服務器名second.example.com' '的ProxyPass 「/」 「https://stackoverflow.com/」'' ProxyPassReverse「 /「」https://stackoverflow.com/「' '' 感謝您花時間回答我的問題。 –