我在一些地方问过这个问题,但没有找到答案。应该非常简单,也是很常见的问题。不幸的是,我对 tomcat 和 mod_proxy 一无所知,所以我无法弄清楚。
我有几个应用程序在 tomcat 中运行,安装为 wars,我可以通过以下方式访问它们:
myserver.com:8080/myapp
我只是想创建一个 apache vhost 来转发myapp.myserver.com对此myserver.com:8080/myapp使用 mod_proxy。
Hudson 是一个完美的例子,没有额外的配置,只有部署的 war。所以我设置了以下 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 以及任何其他应用程序中。
额外的“hudson”有什么用处?为什么它不起作用?
答案1
您的代理配置应为:
ProxyPass / http://localhost:8080/hudson/
ProxyPassReverse / http://localhost:8080/hudson/
302
然后,您需要首先找出导致重定向的原因。可能是其他地方的重写规则导致了重定向。
另外,你可能要考虑使用mod_proxy_ajp而是用于 Tomcat 连接,因为它就是为此而设计的。