Nginx(11)--获取真实的客户端IP

1.实验所需服务器

number1:nginx的web服务器
number2:number1的代理
number3:客户端,通过代理服务器来访问
注意: 在编译服务器number1时,要编译安装模块http_realip_module,才能做以下实验

2.配置代理服务器(number2)

  • tar zxf nginx-1.16.1.tar.gz #解压
  • cd nginx-1.16.1/ #切换到解压路径下
  • ./configure --prefix=/usr/local/nginx #安装
  • yum install gcc openssl-devel pcre-devel -y #安装依赖性所需软件
  • ./configure --prefix=/usr/local/nginx #安装
  • make && make install #编译并安装
    Nginx(11)--获取真实的客户端IP
    Nginx(11)--获取真实的客户端IP
    Nginx(11)--获取真实的客户端IP
    Nginx(11)--获取真实的客户端IP
  • cd /usr/local/nginx/conf/ #切换到配置目录下
  • vim nginx.conf #编辑配置文件
  • ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ #建立nginx启动的软连接
  • nginx -t #查看配置文件编写是否错误
  • nginx #启动nginx
  • 编辑内容如下:
    Nginx(11)--获取真实的客户端IP
    Nginx(11)--获取真实的客户端IP
    Nginx(11)--获取真实的客户端IP

3.在客户端测试(number3)

  • vim /etc/hosts #添加解析
  • curl www.westos.org #访问域名
    Nginx(11)--获取真实的客户端IP

4.在服务器上(number1)

  • 查看日志,发现访问的是172.25.254.2
    Nginx(11)--获取真实的客户端IP
  • cd /usr/local/nginx/conf/ #切换到配置目录中
  • vim nginx.conf #编辑配置文件
  • 编辑内容如下:
  • set_real_ip_from 172.25.254.2; #真实的ip为反向代理的ip
  • real_ip_header X-Forwarded-For; #从请求头中获得,可以保存每一级ip的报文头
  • real_ip_recursive on; #将选项打开,获取真实的ip地址
  • nginx -t
  • nginx -s reload

Nginx(11)--获取真实的客户端IP

5.在代理服务器上(number2)

  • vim nginx.conf #编辑配置文件
  • 编辑内容如下:
  • proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #填写报文从哪里获得
  • nginx -t
  • nginx -s reload

Nginx(11)--获取真实的客户端IP

6.在客户端测试(number3)

  • 依旧访问的是代理服务器
    Nginx(11)--获取真实的客户端IP

7.在服务器上(number1)

  • 查看日志,发现访问的是172.25.254.3
    Nginx(11)--获取真实的客户端IP