我有一个Apache2服务器,它除了承载一些其他内容外,还在localhost:8080将Tomcat8服务器上的https转换为http :8080,它正在运行一个spring引导应用程序。为此,我们将在网站中使用下面的配置-可用
ProxyPass / http://0.0.0.0:8080/
ProxyPassReverse / http://0.0.0.0:8080/一切都在为我们工作。直到我们观察到我们无法记录客户端IP,因为我们错过了一个明显的原因。由于我们的请求现在是由apache2代理的,所以我们作为客户端ip接收127.0.0.1。现在,我们如何确保我们正在接收有效的客户端ip,就像我们之前没有使用apache2作为代理服务器时的情况一样。
提前谢谢。
发布于 2018-03-30 15:31:39
解决此问题需要代理在转发前将主机信息保存在X转发的请求头中。在Apache2中,通过添加
ProxyPreserveHost On以及conf中对应的VirtualHost配置的其他信息。可以通过在日志中添加X转发-For标头来验证这一实现。在Apache2中,您必须编辑/etc/apache2/apache2.conf for LogFormat,如下所述:
在/var/log/apache2/access.log上观察X转发- for标头的日志.
一旦您确定了这一点,您现在可以配置Tomcat8来配置/etc/tomcat8/server.xml中的阀门,如描述这里
或者简单地添加:
<Valve className="org.apache.catalina.valves.RemoteIpValve" internalProxies="127.0.0.1" remoteIpHeader="x-forwarded-for" />我希望这会对其他人有所帮助。
https://stackoverflow.com/questions/49576782
复制相似问题