`
iwebcode
  • 浏览: 2010845 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

Nginx作为反向代理时传递客户端IP http://blog.haohtml.com/archives/11434

 
阅读更多

Nginx作为反向代理时传递客户端IP

in系统架构

因为架构的需要采用多级 Nginx 反向代理,但是后端的程序获取到的客户端 IP 都是前端 Nginx 的 IP,问题的根源在于后端的 Nginx 在 HTTP Header 中取客户端 IP 时没有取对正确的值。同样适用于前端是 Squid 或者其他反向代理的情况。(通用的解决方案是直接取服务器的变量 HTTP_X_FORWARDED_FOR 的值即可取出客户端的真实ip地址)

首先前端的 Nginx 要做转发客户端 IP 的配置:

location / {
proxy_pass http://localhost:8000;# Forward the user's IP address to Rails
proxy_set_header X-Real-IP $remote_addr;
# needed for HTTPS
# proxy_set_header X_FORWARDED_PROTO https;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_redirect off;
}

后端的 Nginx 需要安装一个 Module:NginxHttpRealIpModule,编译的时候默认不包含此 Module,需要重新编译安装 Nginx,configure 的时候加上 –with-http_realip_module,Nginx 升级或者添加/删除 Module 时支持热切换,可以避免中断服务。

升级后配置 NginxHttpRealIpModule,set_real_ip_from 就是指前端 Nginx 或者 Squid 的 IP:

location / {
proxy_pass http://localhost:8000;# Forward the user's IP address to Rails
proxy_set_header X-Real-IP $remote_addr;
# needed for HTTPS
# proxy_set_header X_FORWARDED_PROTO https;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_redirect off;
# NginxHttpRealIpModule
set_real_ip_from 192.168.1.0/24;
set_real_ip_from 192.168.2.1;
real_ip_header X-Real-IP;
}

最后记得 reload Nginx config.使nginx平滑过渡,应用新的配置文件.

===================================

另也有网友给的以下方法,和上面的差不多,但不需要其它的模块,只是在取ip的时候,取的服务器变量有些不一样.由于程序修改度小,所以此方法用的较多.

在nginx中设置:

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变量HTTP_X_REAL_IPHTTP_X_FORWARDED_FOR中获取用户的ip地址。

HTTP_X_REAL_IP的值是nginx得到的用户REMOTE_ADDR

分享到:
评论

相关推荐

    Nginx作为反向代理时传递客户端IP的设置方法

    因为架构的需要采用多级 Nginx 反向代理,但是后端的程序获取到的客户端 IP 都是前端 Nginx 的 IP,问题的根源在于后端的 Nginx 在 HTTP Header 中取客户端 IP 时没有取对正确的值。 同样适用于前端是 Squid 或者...

    PHP 仿陌陌直播

    ./configure --prefix=/usr/local/nginx --add-module=../nginx-rtmp-module --with-http_ssl_module make && make install 本次默认安装目录为:/root, add-module为下载的nginx-rtmp-module文件路径。 安装时候...

    nginx安装教程

    sudo ./nginx -s reload root实例: location ^~ /t/ { root /www/root/html/; } 如果一个请求的URI是/t/a.html时,web服务器将会返回服务器上的/www/root/html/t/a.html的文件。 alias实例: location ^~ /t/ {...

    标题AI语音机器人安装方法 AI机器人安装代码

    yum install -y wget && wget -O install.sh http://download.bt.cn/install/install.sh && sh install.sh 2.破解宝塔 升级到宝塔专业版尽量不要破解 wget -O update.sh ...

    index.html301到主域名(宝塔nginx亲测有效).txt

    很多人都会遇到这样的情况,主域名后缀:index.html被百度收录了,为了不... ... http://www.xxx.com/index.html 301 到 http://www.xxx.com 这样的好处: 主页权重不会分散太厉害,301要比再robots里频闭的效果要好。

    nginx反向代理导致session失效的问题解决

    两边通过同一个nginx进行反向代理,nginx配置大致如下, location /health/ { proxy_pass http://192.168.40.159:8081/health/; #无问题的配置 } location /health-dev/ { proxy_pass ...

    linux版nginx和依赖包

    1.实现反向代理 1.将不同模块和不同类型的资源放置在不同的服务器,他们的路径前缀是有区别的 例如:图片放置在服务器a, http://xxx/images/... js文件放置在服务器b, http://xxx/js/... css文件放置在服务器c...

    nginx+tomcat高可用、高性能jsp集群

    ./init_system.sh #此脚本参见http://kerry.blog.51cto.com/172631/555535 三、LVS+keeplived #关于LVS+keeplived的配置请参考我的另一篇博文《CentOS5.5环境下布署LVS+keepalived 》...

    常用Java Web应用软件 (LNMJ,LAMJ)安装

    本文主要总结了在Ubuntu10下常用Java Web应用软件的安装,特别是LNMJ Web(Linux+Nginx+Mysql+Java Tomcat)架构和LAMJ Web(Linux+Apache+Mysql+Java Tomcat)架构下的软件安装。为进一步配置和实现LNMJ和LAMJ架构(负载...

    nginx安装与使用.zip

    http://blog.163.com/njut_wangjian/blog/static/1657964252013327103716818/ Nginx开发从入门到精通 http://tengine.taobao.org/book/index.html nginx官网上下载相应的安装包,--- 直接解压就行了 ...

    Linux下Nginx搭建

    1.Ngnix 下载 http://nginx.org/en/download.html 黄海下载的是: http://nginx.org/download/nginx-1.0.11.tar.gz 2.Tomcat 下载 http://tomcat.apache.org 本例使用的是6.0.35版本的tomcat ...

    nginx-rtmp服务器搭建的教材及资源

    2,nginx依赖以下模块: 1,rewrite模块需要 pcre 库 官网:http://www.pcre.org/ 下载文件的链接:ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.42.tar.bz2 2,ssl 功能需要 openssl 库 ...

    一分钟搞定 Nginx反向代理 nginx域名代理

    同一ip(都是80端口)可以绑定无数个域名 配置简单 里面包含一个配置文档:配置文档.doc 看一遍 大部分人都会设置了。 内容如下: NGNIX配置文档 1.解压文件到相应文件夹下(我解压到D:/下) (这里是图片) 目录...

    Nginx通过/etc/init.d/nginx方式启停【nginx配置文件】

    vi /etc/init.d/nginx 修改nginx后 chmod +x /etc/init.d/nginx /sbin/chkconfig nginx on sudo /sbin/chkconfig --list nginx /etc/init.d/nginx start

    Nginx白名单防御模块belialwaf.zip

    WIN 的 你可以用个 linux 的 nginx 做反向代理 保护后面的服务。 Belial 目前包含的模块有 : GET 、 POST 、 COOKIE SQL注入防御、文件上传控制、POST白名单审核、nginx路径解释防御、封IP、 自动拦截防御 cc...

    openssl-1.0.1s.tar.gz/zlib-1.2.8.tar.gz/pcre-8.38.tar.gz/nginx-1.8.1.tar.gz

    Nginx需要依赖的包: ssl功能需要openssl库(https://www.openssl.org/) gzip模块需要zlib库(http://www.zlib.net/) rewrite模块需要pcre库(http://www.pcre.org/) Nginx包下载地址:...

    单点登录源码

    各个子系统前台thymeleaf模板,前端资源模块,使用nginx代理,实现动静分离。 > zheng-upms 本系统是基于RBAC授权和基于用户授权的细粒度权限控制通用平台,并提供单点登录、会话管理和日志管理。接入的系统可自由...

    centos7安装rtmp所需软件,对应教程 https://bxoon.blog.csdn.net/article/detai

    1. nginx-1.9.9.tar.gz 2. nginx-rtmp-module-master.zip 3. OBS-Studio-29.1.3-Full-Installer-x64.exe 4. vlc-3.0.18-win64.exe 5. 测试视频.mp4 对应教程 https://bxoon.blog.csdn.net/article/detai 有些软件...

    与DNS配置有关的nginx服务器配置

    要求 Nginx可以通过域名构建虚拟主机的方式同时对外提供 http://www.example.com, http://erp.example.com, http://oa.example.com 三个网站的访问。 访问 http://www.example.com 网站返回的HTML代码“<h1> ...

    反向代理服务器 Nginx

    Nginx (engine x) 是一个轻量级的、高性能的、基于 Http 的、反向代理服务器,静态 web 服务器。 Nginx 最初是由俄罗斯人 Igor Sysoev(伊戈尔·赛索耶夫)使用 C 语言为俄罗斯访问量第 二的 Rambler.ru 站点开发的...

Global site tag (gtag.js) - Google Analytics