如何在两层服务器的第二层Nginx上获取用户IP

如何在两层服务器的第二层Nginx上获取用户IP,第1张

如何在两层服务器的第二层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这个变量。这允许我们获取HTTP请求中通常情况下前端服务器保存的客户真实IP地址的字段,通常就是我们说的X_FORWARDED_FOR字段,然后通过这样的方法,我们就可以实现各种各样的功能了。

三.下面我来实际给大家做一个简单演示。诸多不足,欢迎指正。

首先我们先搭建好Nginx的环境,这里我们使用1.7 系列的最新版本 1.7.9为例,(关于版本的问题参见FAQ 1)

下载、WGET所需地址 http://nginx.org/download/nginx-1.7.9.tar.gz

1. 下载Nginx

[lugt@localhostmysql]$ wget http://nginx.org/download/nginx-1.7.9.tar.gz

2. 解压

[lugt@localhostmysql]$ tar zxvf nginx-1.7.9.tar.gz

3. 直接编译(需要考虑是否需要openssl等插件的支持)

[lugt@localhost mysql]$cd nginx-1.7.9

[lugt@localhost nginx-1.7.9]$ ./configure

[lugt@localhost nginx-1.7.9]$ make

[lugt@localhost nginx-1.7.9]$ su

[lugt@localhostnginx-1.7.9]$ make install

4. 然后接下来修改nginx.conf配置文件

[lugt@localhost nginx-1.7.9]$ su

[lugt@localhost nginx-1.7.9]$cd /usr/local/nginx

[lugt@localhostnginx]$ vi conf/nginx.conf

楼主这里假定:

xbox one有两层服务器:

第一层是xbox外围服务器,相当于live的缓冲区

第二层是真.live服务器,可实现全部服务

ps:楼下纠正了,叫会话服务器和服务服务器 

以下具体解释一下:

你在x1开机的时候,理论上默认是要把账号自动连入live的。

但由于大陆连外服的质量实在憋屈,或者此时段live崩溃中。微软总不能让你等个五分钟登录了live再开机吧,于是只要你不是完全断网,就会默认先把你的x1登录进第一层是xbox外围服务器,这时你其实是连着网的,但只能进行比如系统更新,游戏更新,用edge看个网页之类的操作,一切云同步的操作都不可。

这点相当误导萌新!我明明连着网的,为啥不能上live?!

但是,当你登出账号,再次登入时,微软就只能把你的账号硬往“第二层是真.live服务器”里塞,不论你尝试几次,等多久(我山东电信一般是等个2分钟),总会挤进去的,此时一些服务才皆可用,比如同步成就,存档,联机等。


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/165084.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-03-24
下一篇2023-03-24

发表评论

登录后才能评论

评论列表(0条)

    保存