1

我的场景是这样的:我有一台 Apache 2.2 配置为反向代理的机器,另一台机器上有 Apache Tomcat7 在端口 8080 上侦听。

我的目标是让互联网用户访问资源“am”(部署在 Tomcat 上)而不使用 Tomcat 机器的 IP 地址,而只联系反向代理。

到目前为止,我设置了反向代理的 httpd.conf:

ProxyPass /am http://tomcat_server.com:8080/am ProxyPassReverse /am http://tomcat_server.com:8080/am

但问题是反向代理告诉用户联系 tomcat_server 但当然 tomcat_server 是私有 IP,互联网用户无法访问。

4

2 回答 2

1

在您的Tomcat server.xml配置文件中,

编辑 http连接器以包含属性:proxyPortproxyName - 使其类似于:

<Connector
 port="8080"
 protocol="HTTP/1.1"
 connectionTimeout="20000"
 redirectPort="8443"
 proxyPort="80"
 proxyName="url.domain.clients.use.for.your.webapp"
 />
  • proxyPort="80" -- 使 Tomcat 将数据返回给您的 Apache 代理
  • proxyName="url.domain.clients.use.for.your.webapp" - 使 Tomcat 将 url 返回给您的用户客户端应处理的 Apache 代理,而不是他们无法访问的 tomcat_server.com

以下是一些提到它的旧 Tomcat 文档:

代理名称

如果在代理配置中使用此连接器,请配置此属性以指定要为调用 request.getServerName() 返回的服务器名称。有关详细信息,请参阅代理支持。

代理支持

当 Tomcat 在代理服务器后面运行时,可以使用 proxyName 和 proxyPort 属性。这些属性修改返回给调用 request.getServerName() 和 request.getServerPort() 方法的 Web 应用程序的值,这些方法通常用于构造重定向的绝对 URL。如果不配置这些属性,返回的值将反映从代理服务器接收连接的服务器名称和端口,而不是客户端将原始请求定向到的服务器名称和端口。


我解决了类似的需求,让 Tomcat 仅在其本地主机上侦听:

Tomcat 9 连接器如何监听 127.0.0.1 反向代理到 Win。具有私有 ServerName 的 Apache 2.4

于 2018-04-26T15:21:14.990 回答
0

如果您的问题是对 HTML 中的源服务器的引用,请查看 mod_proxy_html 或 mod_substitute。

于 2013-08-30T22:06:07.217 回答