使用apache 2.2 mod_proxy做tomcat web应用反向代理

apache的配置

mod_proxy 支持转发代理和反向代理,所以配置反向代理时首先需要关闭转发代理,关闭方式见下面配置示例备注

# Put this after the other LoadModule directives
LoadModule proxy_module /usr/lib/apache2/modules/mod_proxy.so
LoadModule proxy_http_module /usr/lib/apache2/modules/mod_proxy_http.so

# Put this in the main section of your configuration (or desired virtual host, if using Apache virtual hosts)
# 关闭转发代理
ProxyRequests Off
# 指定使用原始Http header的Host属性,在后端服务需要知道原始Host属性
# 时会很有用,默认是关闭的
ProxyPreserveHost On

# 对被代理资源的指令说明
<Proxy *>
    # Order说明deny 和 allow的执行顺序
    # 一般这个指令可以解释为默认应用xx规则除了yy规则之外
    # xx和yy规则在Order下方指定
    Order deny,allow
    Allow from all
</Proxy>

# 激活针对特定地址的反向代理
ProxyPass /confluence http://app-server.internal.example.com:8090/confluence
# 这个指令会调整HTTP redirect response Header中的 Location, Content-Location 和 URI 属性中的URL到代理服务器地址
# 作为反向代理服务时强烈建议开启这个选项,避免透传请求到后端服务
ProxyPassReverse /confluence http://app-server.internal.example.com:8090/confluence
# 对新的url权限进行说明
<Location /confluence>
    Order allow,deny
    Allow from all
</Location>

tomcat的配置

tomcat中的配置左右主要是告诉tomcat redirect或者forward的时候使用代理地址,而不是上一节点所请求的实际服务器地址,具体配置如下

<Connector port="9080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="9443"
    proxyName="sample.com" proxyPort="80"/>

上面配置中的proxyNameproxyPort就是告诉tomcat代理服务器的地址和端口。在servlet中可以通过下面的代码获得这两个参数的值

request.getServerName();
request.getSreverPort();
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容