当我们给网站使用例如CDN,Nginx或Varnish等缓存服务时,为了获取访客的真实IP,大多数会地把访客的真实IP赋值给X-Forwarded-For(下文简称XFF)。 但是因为XFF是个HTTP请求头,也就是最前面带有http_,因此这类http信息就可以被伪造。 其实根据实际使用情况判断是否需要获取XFF内容就不会出现这些问题。 拿Nginx的反代理(Proxy模块)功能来说,有人会把$proxy_add_x_forwarded_for变量的内容传给后端作为用户的真实IP。 Nginx对该变量的处理非常智能,当有XFF传过来时,Nginx就会自动把Ngin […]
Tag: Varnish
LNMPV0.3 Stable For Ubuntu 12.*/Debian 6/Debian7/CentOS6 32Bit or 64Bit
从今天开始,LNMPV的网站正式启用,以后新版均在http://www.mke2fs.com发布 LNMPV 0.2 Stable: 昨天发布了LNMPV 0.1测试版,感谢http://imlonghao.com/这个勇敢的小白,试用了我的LNMPV0.1,告知了我很多BUG,经过昨晚的努力,终于解决了。 另外还要感谢单手摘JJ,经过他昨晚的提醒,让我恍然大悟,发现可以一站一POOL来实现PHP以特定的用户身份执行。从而解决跨站问题。 本次更新: 1 )使用sock方式链接PHP-FPM 2 )添加可选的一站点一POOL的功能 3 )修改PHP-FPM的进程上限 4 )修改PH […]
Varnish(前)+Nginx(中)时,让Apache(后)获取用户真实IP(多重代理)
不得不说我有点问题,网站一个Apache+Varnish不够,还要在Apache和Varnish之间插入个第三者——Nginx。 因为某些需要,也给该服务器上的个别网站上了CDN。 Apache做后端,前面多一个Nginx Proxy Cache+Varnish,获取用户的真实IP不难,只需给Apache上一个rpaf模块就行了,然后让Varnish处理XFF的内容就好了:
Varnish
Default
1 2 3 4 5 6 7 8 |
if (req.restarts == 0) { if (req.http.x-forwarded-for) { set req.http.X-Forwarded-For = req.http.X-Forwarded-For + ", " + client.ip; } else { set req.http.X-Forwarded-For = client.ip; } } |
无CDN的情况下访问网站,可以正确获取到用户的真实IP。 最近给网站上多了一个CDN,rpaf模块就显得无能为力了。因此,这几天一直苦恼如何让我的网站获取用 […]