【问题标题】:apache reverse proxy - how to hide internal networkapache反向代理 - 如何隐藏内部网络
【发布时间】:2013-09-02 21:56:33
【问题描述】:

我的场景是这样的:我有一台 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,不能被互联网用户访问。

【问题讨论】:

  • 它如何“告诉用户”? HTML?重定向?

标签: apache reverse reverse-proxy


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    编辑 http Connector 以包含属性: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 文档:

    代理名称

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

    代理支持

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


    我遇到了类似的需求,让 Tomcat 只在其本地主机上侦听:

    How can Tomcat 9 Connector listening 127.0.0.1 reverse proxy to Win. Apache 2.4 with private ServerName

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-14
      • 2021-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多