我的情况是这样的:我有一台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,互联网用户无法访问。
答案 0 :(得分:1)
在 Tomcat server.xml 配置文件中
编辑http 连接器以包含属性: proxyPort , proxyName - 使其类似于:
<Connector
port="8080"
protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
proxyPort="80"
proxyName="url.domain.clients.use.for.your.webapp"
/>
以下是一些提及它的较旧的Tomcat文档:
的proxyName
如果在代理配置中使用此连接器,请配置 此属性指定要为调用返回的服务器名称 request.getServerName()。有关详细信息,请参阅代理支持。
代理支持
运行Tomcat时可以使用proxyName和proxyPort属性 在代理服务器后面。这些属性修改返回的值 调用request.getServerName()和的Web应用程序 request.getServerPort()方法,通常用于构造 重定向的绝对URL。没有配置这些属性, 返回的值将反映服务器名称和端口 收到代理服务器的连接,而不是服务器 客户指示原始请求的名称和端口。
我完成了类似的需求,让Tomcat只在其localhost上监听:
答案 1 :(得分:0)
如果您的问题是HTML中对原始服务器的引用,请查看mod_proxy_html或mod_substitute。