Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当网站在Tomcat前面配置了Apache Varnish时,获取用户机器的IP地址_Apache_Jakarta Ee_Tomcat6_Varnish - Fatal编程技术网

当网站在Tomcat前面配置了Apache Varnish时,获取用户机器的IP地址

当网站在Tomcat前面配置了Apache Varnish时,获取用户机器的IP地址,apache,jakarta-ee,tomcat6,varnish,Apache,Jakarta Ee,Tomcat6,Varnish,目前,我正在运行一个在Tomcat上运行的网站,它的前端是Apache,用于缓存的是varnish。Tomcat在端口8080上运行,端口81用作后端。我需要实现一个功能,我需要知道访问网站的客户端机器的IP地址。我试图通过X-FORWARDED-FOR头访问IP地址 当从端口81访问网站时,即我可以获取客户端机器的IP地址,但不幸的是,当通过默认端口80访问网站时,即返回本地主机IP地址127.0.0.1。是否有人能建议如何从端口80获取用户的真实IP地址?如果我理解正确,您的设置如下: 清漆

目前,我正在运行一个在Tomcat上运行的网站,它的前端是Apache,用于缓存的是varnish。Tomcat在端口8080上运行,端口81用作后端。我需要实现一个功能,我需要知道访问网站的客户端机器的IP地址。我试图通过X-FORWARDED-FOR头访问IP地址


当从端口81访问网站时,即我可以获取客户端机器的IP地址,但不幸的是,当通过默认端口80访问网站时,即返回本地主机IP地址127.0.0.1。是否有人能建议如何从端口80获取用户的真实IP地址?

如果我理解正确,您的设置如下:

清漆端口80->Apache端口81->Tomcat端口8080

您希望实际的远程IP在Tomcat服务器上显示为remote_ADDR

Varnish在默认情况下会附加X-Forwarded-For头,所以已经排序了。要让Apache将实际的远程IP传递给Tomcat,您应该安装。mod_rpaf完全符合您的要求。Apache的适当配置为:

<IfModule !rpaf_module>
    LoadModule rpaf_module modules/mod_rpaf-2.0.so
</IfModule>

<IfModule rpaf_module>
    RPAFenable On
    RPAFsethostname On
    RPAFproxy_ips 127.0.0.1
    RPAFheader X-Forwarded-For
</IfModule>

启用模块后,Tomcat应该会看到正确的REMOTE\u ADDR头以及HTTP\u X\u FORWARDED\u FOR头。

您是否将apache配置为包含X-FORWARDED-FOR头?您的意思是从apache2.conf或从varnish vcl文件进行配置?我没有执行任何操作。两者都有。您可能还需要配置tomcat。举个简单的例子:我倾向于在端口80上安装nginx,它可以代理回同一台机器上或网络中的混合web应用服务器,可以是apache、uwsgi/python、php fcgi等。我必须在“公共”ip上配置nginx,以去除任何伪造的头并传回x-real-ip。然后其他服务器配置了将x-real-ip/x-forwarded-for移动到远程地址的中间件。但在我的情况下,nginx没有在apache/varnish前面运行。在我的情况下,varnish在端口80上,apache在端口80上,tomcat在端口8080上。我检查了apache日志,发现端口80的引用显示为127.0.0.1,这意味着当varnish向apache提交请求时,客户端ip被视为本地主机ip。因此,是否有任何解决方法使引用者作为主机的真实ip而不是本地主机ip提交?