【发布时间】:2012-09-06 02:30:46
【问题描述】:
目前,我正在运行一个在 Tomcat 上运行的网站,该网站在前面有 Apache,并使用清漆进行缓存。 Tomcat 在端口8080 上运行,端口81 用作清漆后端。我需要实现一个功能,我需要知道访问该网站的客户端机器的 IP 地址。我尝试通过标头X-FORWARDED-FOR访问IP地址。
当从端口 81(即http://mywebsite.com:81/)访问该网站时,我可以获得客户端机器的 IP 地址,但不幸的是,当通过默认端口 80(即http://mywebsite.com/)访问时,它会返回本地主机 IP 地址(127.0. 0.1)。谁能建议如何从端口 80 获取用户的真实 IP 地址?
【问题讨论】:
-
您是否配置了 apache 以包含 x-forwarded-for 标头?
-
你的意思是从 apache2.conf 或从 varnish vcl 文件配置?我没有做这些。
-
两者。您可能还需要配置 tomcat。举个简单的例子:我倾向于在端口 80 上安装 nginx,它可以代理回同一台机器上或网络内的混合 Web 应用程序服务器(可能类似于:apache、uwsgi/python、php-fcgi , ETC )。我必须在“公共”IP 上配置 nginx 以去除任何欺骗性标头并传回 x-real-ip。然后其他服务器具有将 x-real-ip/x-forwarded-for 移动到 remote_addr 的配置/中间件。
-
但在我的情况下,nginx 没有在 apache/varnish 前面运行。在我的情况下,varnish 在端口 80 上,apache 在端口 80 上,然后 tomcat 在端口 8080 上
-
我检查了 apache 日志,发现端口 80 的引用地址显示为 127.0.0.1,这意味着当 varnish 向 apache 提交请求时,客户端 ip 被视为 localhost ip .那么,是否有任何解决方法可以让varnish将引用者提交为主机的真实ip而不是localhost ip?
标签: apache jakarta-ee tomcat6 varnish