我在几个地方问过这个问题,但没有找到答案。这应该很简单,也是一个很常见的问题。不幸的是,我对 tomcat 和 mod_proxy 一无所知,所以我无法弄清楚。
我有一些在 tomcat 中运行的应用程序,作为战争安装,我可以在以下位置访问它们
myserver.com:8080/myapp
我只是想创建一个使用 mod_proxy将myapp.myserver.com转发到这个myserver.com:8080/myapp的 apache vhost。
Hudson 就是一个完美的例子,没有额外的配置,只是一场部署战争。所以我设置了以下apache vhost:
<VirtualHost *:80>
ServerName hudson.myserver.ca
ProxyPreserveHost On
ProxyPass / http://localhost:8080/hudson
ProxyPassReverse / http://localhost:8080/hudson
</VirtualHost>
我的 proxy.conf 是:
<IfModule mod_proxy.c>
ProxyRequests Off
<Proxy *>
AddDefaultCharset off
Order deny,allow
Allow from all
</Proxy>
# Enable/disable the handling of HTTP/1.1 "Via:" headers.
# ("Full" adds the server version; "Block" removes all outgoing Via: headers)
# Set to one of: Off | On | Full | Block
ProxyVia On
</IfModule>
每个应用程序上的每个请求都具有相同的行为。例如,我去 hudson.myserver.ca,它出于某种原因转发到 hudson.myserver.ca/hudson,它给出了一个 tomcat 404,上面写着
The requested resource (/hudsonhudson/) is not available.
发生在 hudson、jira、confluence 和任何其他应用程序上。
额外的“哈德森”是怎么回事,为什么这不起作用?
您的代理配置应为:
然后,您需要首先找出导致
302
重定向的原因。其他地方可能有导致它的重写规则。另一方面,您可能需要考虑使用mod_proxy_ajp代替 Tomcat 连接,因为这就是它的用途。