当前位置:首页 > 技术文章 > 正文内容

如何让Nginx后端服务收到真实的客户IP?

arlanguage5个月前 (12-13)技术文章68

背景

开发有一个服务部署在阿里云上,依赖阿里云的CLB(传统型负载均衡)暴露服务,因特殊要求,CLB和后端服务之间需要通过自建Nginx做代理,拓扑图如下,

应用拓扑

操作

客户端的请求经过了两层代理,这里CLB和Nginx都要做配置。

1,配置CLB

CLB的配置比较简单,在配置“监听”时,要附加“X-Forwarded-For”HTTP头字段

附加X-Forwarded-For HTTP头字段

大多数情况下,并没有CLB这层代理,但加入这层后,我们对后面知识的理解将更加透彻。

2,Nginx配置

直接上配置文件,

server {
        listen 80;
        server_name www.example.com;
        set_real_ip_from 100.64.0.0/10;
        real_ip_header X-Forwarded-For;
        access_log /data/logs/nginx/access.log;
        error_log  /data/logs/nginx/error.log;

        location / {
            proxy_pass http://10.x.x.x:12345;  //后端服务地址
            proxy_set_header Host      $host;
            proxy_set_header X-REAL-IP $remote_addr;
            allow 120.79.x.x/32;    //对外服务,做好限制
            deny all;
            }
}

实现将客户端的真实IP传递给后端服务,依赖这三行,

set_real_ip_from 100.64.0.0/10;
real_ip_header X-Forwarded-For;
proxy_set_header X-REAL-IP $remote_addr;

知识

因为有阿里CLB和Nginx两层代理,需要用“set_real_ip_from”来辅助取得客户的真实IP,该选项后面的IP是第一层代理即CLB的IP,可以从Nginx访问日志中得到(在未配置选项“set_real_ip_from”的情况下),下图中第一列就是CLB的IP,因为阿里云CLB的IP随时变动,配置中用了IP段的方式。

nginx的访问日志

“real_ip_header X-Forwarded-For”,含义是使用HTTP头部域“X-Forwarded-For”的值作为客户端的IP,如果没有配置选项“set_real_ip_from”,该值将是CLB的IP。

“proxy_set_header X-REAL-IP $remote_addr”,Nginx设置发送到后端服务的HTTP请求头X-REAL-IP,值为变量“remote_addr”的值,即客户端的真实IP。

最后说明一下,HTTP请求头“X-Forwarded-For”的格式如下:

X-Forwarded-For: <client>, <proxy1>, <proxy2>

最左边的值是客户端的IP,后面的值是代理服务器的IP,时间顺序上,最右边的代理IP是最后访问的代理。这也就是为什么我们要加入选项“set_real_ip_from”的原因。

扫描二维码推送至手机访问。

版权声明:本文由AR编程网发布,如需转载请注明出处。

本文链接:http://www.arlanguage.com/post/155.html

标签: nginx的logs
分享给朋友:

“如何让Nginx后端服务收到真实的客户IP?” 的相关文章

如何解决Nginx服务器,启动成功,访问无效

前言服务器:阿里云服务器 Ubuntu 16.04.3 LTS自己弄了个学习的demo,搭建了vue + elementui + spring boot 前后端分离。将项目部署到服务器上面。 装好nginx,为了避免冲突,将端口改为了8001,启动nginx,发现访问不了!查找问题1.先查看ngin...

nginx代理域名404问题解决

使用nginx代理接口调用时,proxy_pass后面可以配置ip,也可以配置域名,使用ip时一般没有问题,但是使用域名时经常会出现出现404的问题如使用代理某一个服务器的接口location /myapi /{ proxy_pass http://192.168.11....

Nginx笔记

内容介绍 1、nginx基本概念。(1) nginx是什么,能做什么事情(2) 反向代理。(3) 负载均衡。(4) 动静分离2、nginx 安装、常用命令和配置文件(1)在liunx系统中安装nginx.(2) nginx常用命令。(3) nginx 配置文件。3、nginx 配置实例 1-反向代理...

logstash+ES+kibana搭建日志收集分析系统

日志监控和分析在保障业务稳定运行时,起到了很重要的作用,不过一般情况下日志都分散在各个生产服务器,且开发人员无法登陆生产服务器,这时候就需要一个集中式的日志收集装置,对日志中的关键字进行监控,触发异常时进行报警,并且开发人员能够查看相关日志。logstash+elasticsearch+kibana...

http请求域名强制跳转https

网站添加了https证书后,当http方式访问网站时就会报404错误,所以需要做http到https的强制跳转设置. ---------------一、采用nginx的rewrite方法--------------------- 下面是将所有的http请求通过rewrite重写到https上。 例如...

Linux日志处理神器-Logrotate

Logrotate简介Logrotate是Linux中日志分割、压缩、清理的工具,一般CentOS默认都会安装该工具。logrotate运行原理logrotate依赖于anacron执行每小时、每天、每周或每月的定时任务,corn每个小时会扫描当前机器中定时任务执行状态。 logrotate运行依...