我正在使用以下内容VirtualHost
和 mod_proxy 将我的“api”子域的所有请求代理到位于我webapps/webservice
的 Tomcat 上的 Java webservice。
<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”不可用。
有人知道该怎么办吗?
解决方案: 尽管我之前尝试过这个解决方案,但 Stony 是对的!我遇到的问题是,即使我没有更改任何内容,我也必须重新启动 Tomcat 才能使其正常工作。我多次重新启动 Apache,但什么也没改变。
答案1
我不知道我是否正确理解了您的问题,但如果您不想webservice
在 URL 中使用 。那么请将您的代理密码设置为/
。
<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>
或者您想在该域下运行您的 Web 服务?并且您不想要重定向?
答案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>
现在,它只是代理对我的 Tomcat 端口 8080 的所有请求api.mydomain.com
,而不指向特定的目录。
然后我将其添加到/etc/tomcat7/server.xml
:
<Host name="api.mydomain.com" appBase="webapps">
<Context path="" docBase="webservice" />
</Host>
正如ProxyPreserveHost
在我的 Apache 虚拟主机中激活的那样,Tomcat 获取原始请求的主机名,并能够自行决定要传递哪些内容。
appBase="webapps"
即使内容位于其他地方,其内容似乎是从根目录传送的。