博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[转]nginx反向代理获取用户真实ip
阅读量:7037 次
发布时间:2019-06-28

本文共 1088 字,大约阅读时间需要 3 分钟。

nginx做反向代理时,默认的配置后端获取到的ip都是来自于nginx,那么如何转发用户的真实IP到后端程序呢?

当前端使用nginx代理,后端使用php-fpm时,如果还是使用$_SERVER['REMOTE_ADDR'],那么php程序获取到的是nginx的ip地址,而不是用户的真实ip。

upstream www.264.cn {    ip_hash;    server serving-server1.com:80;    server serving-server2.com:80;}server {    listen www.264.cn:80;    server_name www.264.cn;    location / {        proxy_pass http://www.264.cn;    }    proxy_set_header Host $host;    proxy_set_header X-Real-IP $remote_addr;    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}

 

在nginx的配置文件中加入下面三个指令,这样后端php就可以使用$_SERVER['HTTP_X_REAL_IP']获取到访客的ip。

proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

如果你想使用$_SERVER['REMOTE_ADDR'],不想修改代码,那么可以通过修改REMOTE_ADDR的值来实现。

经过多层代理后 $http_x_forwared_for 会含有多个ip,其中第一个ip是客户端的ip,REMOTE_ADDR只能是客户端的ip,所以可以用正则提取 $http_x_forwarded_for的第一个ip给REMOTE_ADDR:

set $realip $remote_addr;  if ($http_x_forwarded_for ~ "^(\d+\.\d+\.\d+\.\d+)") {    set $realip $1;  }  fastcgi_param REMOTE_ADDR $realip;

 

转载于:https://www.cnblogs.com/pajeroquan/p/6897289.html

你可能感兴趣的文章
用Javascript获取页面元素的位置
查看>>
electron 学习笔记
查看>>
vs 开发 qt 遇到 无法找到 Visual Studio 2010 的生成工具(平台工具集 =“v100”) 解决方案...
查看>>
Oracle死锁处理实例
查看>>
[转]Android Studio创建Xposed模块项目时BridgeApi的正确添加方式
查看>>
【hive】——Hive sql语法详解
查看>>
python 全栈开发,Day50(Javascript简介,第一个JavaScript代码,数据类型,运算符,数据类型转换,流程控制,百度换肤,显示隐藏)...
查看>>
一篇网络流的好blog
查看>>
Python基础之继承与派生
查看>>
filter、map、every函数的使用
查看>>
黑马程序员——iOS学习——UITableView表视图单元样式
查看>>
Bash基础——减号-
查看>>
Android适配文件dimen自动生成代码
查看>>
走马观花--快餐学python笔记
查看>>
jquery轻量级富文本编辑器Trumbowyg
查看>>
(二十八)static关键字
查看>>
vue条件渲染
查看>>
转 MySQL数据库基础
查看>>
ubuntu 解压命令全部
查看>>
Chrome教程(一)NetWork面板分析网络请求
查看>>