mod_proxy tomcat

mod_proxy tomcat

我在一些地方问过这个问题,但没有找到答案。应该非常简单,也是很常见的问题。不幸的是,我对 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 连接,因为它就是为此而设计的。

相关内容