蓝盟诗人[LUC]蓝客联盟

Nginx获取CDN之后的真实IP

2018-03-05 19:00 作者: 来源: 本站 浏览: 1,618 views 我要评论 字号:

一、场景

为了防止暴露源IP,以及一些性能的优化,现在越来月多的站长,都会选择用CDN。

CDN或者SLB之后的nginx,如果用传统的remote_addr拿到的IP,通常都是CDN节点IP或者是SLB的节点IP。

这就导致我们网站的access log,denyhosts log等一些软件不能正常工作,诗人此文的目的,便是在于拿到client端的real ip。

通常这些CDN供应商都会传递X-FORWARD-FOR。

诗人博客此文以cloudflare为例。

二、方法一:通过HTTP_X_FORWARDED_FOR获取IP地址

生产环境中,最终的web服务器之前可能还会有NGINX代理服务器,一般的架构如下:最终用户client==>CDN==>NGINX代理==>NGINX 网站 。

执行以上代码,获得的HTTP_X_FORWARDED_FOR可能是:ip1 ip2 ip3 ip4,这是一行ip地址串,最终的NGINX网站服务器将获取HTTP_X_FORWARDED_FOR头,并截取字符串中第一个不为unkown的IP作为用户真实IP地址。

三、方法二(推荐):通过NGINX 的http_realip_module模块

前提条件:nginx必须安装http_realip_module 这个模块。

Nginx获取CDN之后的真实IP

诗人博客本文以CloudFlare为例。

在nginx的vhosts下,某个网站的 conf 文件的合适位置,插入如下代码,代码中的set_real_ip_from地址,都是cloudflare官方提供,参考此文:https://www.bluenoob.com/virtualization/public-cloud/cloudflare/cloudflare-cdn-real-ip-ranges.html

vhost的conf文件如下:

四、方法二测试方法

通过注释上面conf配置文件启用或者禁用来进行测试。

测试所用PHP代码如下:

 

打印
分享到:
复制链接

发表评论

*

* (保密)

Ctrl+Enter 快捷回复

会员登录关闭

记住我 忘记密码

注册会员关闭

小提示: 您的密码会通过填写的"电子邮箱"发送给您.