
listen 8000;
server_name testhost alias anotheralias;
location / {
root "D:\site";
index indexhtml indexhtm;
}
}如何在两层服务器的第二层Nginx上获取用户IP
一.之前在做nginx的服务器配置的时候遇到了一个问题,在之前服务器有用到一个限制客户端最大并发连接的功能,而且这个功能的实现是依靠在服务器中做
[html] view plaincopy
$remote-addr
这样的配置来达到的。但在增加了前端一层(负载、CDN、防火墙、安全服务)服务器之后,拿到的客户端IP就都变成了前端服务器的IP,而并非真是的用户IP地址。
二.这样的问题下,我又重新看了几次nginx官网的介绍,也发现其中另外一个特别重要的变量
[html] view plaincopy
$proxy_add_x_forwarded_for
这个变量是客户端访问请求中的X-forwarded-for 字段的值,如果请求中不包含这个字段,则自动用这个变量会等价于remote-addr这个变量。这允许我们获取>首先,在前端nginx上需要做如下配置:
location /
proxy_set_hearder host $host;
proxy_set_header X-forwarded-for $proxy_add_x_forwarded_for;
proxy_set_header X-real-ip $remote_addr;
};
nginx会在把请求转向后台real-server前把>nginx在转发的时候可以通过添加特定的头来显示原始IP地址
通常使用X-Forwarded-For或CLIENT_IP来表示原始IP地址
IP地址都是以逗号来追加IP地址
所以取该请求头的第一个值,一般就是原始的IP地址基于各种原因,有时想隐藏nginx的显示版本号,也为服务器更安全有如下几个方法1 修改主配置文件nginxconf在>将需要禁止的 IP 放入 Nginx 配置文件并 reload 使其生效即可
假设 nginx 安装路径为:/usr/local/nginx-178
则在该路径下新建配置文件:touch blockipsconf
将你要屏蔽的 IP 写入该文件:vim blockipsconf
deny 1234;
deny 91212450/24;
deny 91212650/24;
然后保存退出
进入路径 /usr/local/nginx-178/conf
编辑文件:nginxconf
在该文件最后一行写入:include blockipsconf;
进入路径 /usr/local/nginx/sbin/
测试 nginxconf 文件是否合法:/nginx -t
如果没有问题 则执行 /nginx -s reload
这样子 即可生效
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)