微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ProxyPass,ProxyReverse vs AJP

我目前有一个Tomcat + Apache HTTP服务器设置来服务我的Java servlet:

ProxyPass /myservice http://localhost:8080/myservice ProxyPassRerverse /myservice http://localhost:8080/myservice

这一切都很好,除了我的服务需要知道客户端的IP地址,由于代理服务器,它始终是127.0.0.1。 有没有解决scheme来获得真正的IP地址? AJP是一个选项吗?

doGet(HttpServletRequest request,HttpServletResponse response){ request.getRemoteAddr() }

Apache / Tomcat错误 – 正在传递错误页面

Apache + Tomcat:使用mod_proxy而不是AJP

切换到HTTPS时出现Grails + Tomcat + Apache错误

在Apache下的子域代理到Tomcat

从AJP连接器请求中检索Shibboleth属性

使用ajp协议连接到备用备用主机别名

使用ajp进行Spring Boot应用程序的Apache后面的Tomcat

通过AJP将REMOTE_USER转发给tomcat(例如shibboleth)

像这样做:

在apache配置中:

<Location /foo> ProxyPass ajp://localhost:8009/foo ProxyPassReverse ajp://localhost:8009/foo </Location>

然后在你的server.xml中:

<Connector port="8009" enableLookups="false" secure="true" URIEncoding="UTF-8" tomcatAuthentication="false" protocol="AJP/1.3" />

这应该通过一切。 AJP协议传递信息,但http:不。

你可能不需要secure =“true”,我使用它,因为SSL是在apache层处理的,我需要tomcat来知道连接应该被认为是安全的。

您可以在请求标题中阅读X-Forwarded-For。

从Apache的mod_proxy文档 :

以反向代理模式(例如,使用ProxyPass指令)进行操作时,mod_proxy_http会添加多个请求标头,以便将信息传递到原始服务器。 这些标题是:

X-Forwarded-For :客户端的IP地址。

X-Forwarded-Host :客户端在Host HTTP请求头中请求的原始主机。

X-Forwarded-server :代理服务器的主机名。

在源服务器上使用这些标题时要小心,因为如果原始请求已经包含这些标题之一,它们将包含多个(逗号分隔)值。 例如,您可以在原始服务器的日志格式字符串中使用%{X-Forwarded-For} i来记录原始客户端IP地址,但是如果请求通过多个代理,则可能会获得多个地址。

在您的servlet中,您将拥有:

doGet(HttpServletRequest request,HttpServletResponse response){ request.getHeader("X-Forwarded-For") }

这很简单:

<VirtualHost> serverName www.server.com redirect / http://www.server.com/foo ProxyRequests off ProxyPass / ajp://localhost:8009/ </VirtualHost>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐