我使用以下內容VirtualHost
和 mod_proxy 將“api”子網域的所有請求代理到位於webapps/webservice
Tomcat 上的 Java Web 服務。
<VirtualHost *:80>
ServerName api.mydoamin.com
ProxyRequests Off
ProxyPreserveHost On
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass /webservice http://localhost:8080
ProxPassReverse / http://localhost:8080
</VirtualHost>
我的問題是,如果我輸入“api.mydomain.com”,我會被重定向到“api.mydomain.com/webservice”,並且收到 404 錯誤,因為“webservicewebservice”不可用。
有人知道該怎麼辦嗎?
解決方案: 儘管我以前嘗試過這個解決方案,但斯托尼是對的!我的情況的問題是,即使我沒有更改任何內容,我也必須重新啟動 Tomcat 才能使其正常工作。我多次重新啟動 Apache,但這並沒有改變任何事情。
答案1
我不知道我是否正確理解你的問題,但如果你不想webservice
在你的網址中出現。然後將您的代理通行證設定為/
。
<VirtualHost *::80>
ServerName api.mydoamin.com
ProxyRequests Off
ProxyPreserveHost On
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / http://localhost:8080/webservice/
ProxPassReverse / http://localhost:8080/webservice/
</VirtualHost>
或者您想在該網域下運行您的網路服務嗎?您不想要重定向嗎?
答案2
經過一些測試和許多錯誤,我終於想出了以下解決方案。
我這樣設定我的 apache 虛擬主機:
<VirtualHost *:80>
ProxyRequests Off
ProxyPreserveHost On
<Proxy *>
Order deny, allow
Allow from all
</Proxy>
ProxyPass / http://127.0.0.1:8080/
ProxyPassReverse / http://127.0.0.1:8080/
ServerName api.mydomain.com
</VirtualHost>
現在它只是代理api.mydomain.com
對連接埠 8080 上的 Tomcat 的所有請求,而不指向特定目錄。
然後我將其添加到/etc/tomcat7/server.xml
:
<Host name="api.mydomain.com" appBase="webapps">
<Context path="" docBase="webservice" />
</Host>
正如ProxyPreserveHost
在我的 Apache 虛擬主機中所啟動的那樣,Tomcat 會取得原始請求的主機名,並能夠自行決定傳送哪些內容。
內容appBase="webapps"
似乎是從根目錄傳遞的,即使它位於其他地方。