资讯专栏INFORMATION COLUMN

nginx配置解析之客户端真实IP的传递

Lsnsh / 3471人阅读

摘要:前后端分离之后,采用作为静态服务器,并通过反向代理的方式实现接口跨域的方式,在降低开发成本的同时也带来了诸多问题,例如客户端真实的获取。

前后端分离之后,采用nginx作为静态服务器,并通过反向代理的方式实现接口跨域的方式,在降低开发成本的同时也带来了诸多问题,例如客户端真实IP的获取。

在一些特殊场景下,比如风控和支付流程,往往需要获取用户的ip信息,但是nginx反向代理在实现跨域的同时,也彻底地改变了服务端请求来源,隔离了用户和服务端的连接,如下图

用户访问前端页面"https://a.test.com/index/html",调用支付接口的时候,支付接口的地址是"https://a.test.com/goPay",然后由nginx反向代理到server端的"https://b.test.com/goPay"。这个时候对于server端来说,他接到的请求都是来自nginx服务器的,此时server 端默认获取到的ip则是nginx服务器的ip。这并不是我们想要的。这个时候就需要添加如下配置:

proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Real-Port $remote_port;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

三个header分别表示:

X-Real-IP            客户端或上一级代理ip
X-Real-Port          客户端或上一级端口
X-Forwarded-For      包含了客户端和各级代理ip的完整ip链路

其中X-Real-IP是必需的,后两项选填。当只存在一级nginx代理的时候X-Real-IP和X-Forwarded-For是一致的,而当存在多级代理的时候,X-Forwarded-For 就变成了如下形式

X-Forwarded-For: 客户端ip, 一级代理ip, 二级代理ip...

在获取客户端ip的过程中虽然X-Forwarded-For是选填的,但是个人建议还是保留这,以便出现安全问题的时候,可以根据日志文件回溯来源。

有个坑~

除了上述配置部分网友还给了一个host的header

proxy_set_header Host $host;

首先这个header并不是必需的,其次这个header host和proxy_pass转发产生的hostheader会出现冲突,导致接口502的情况。但是这个配置更新后,nginx重启包括使用nginx -t进行测试也不会报错,这个值得大家注意一下。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/40086.html

相关文章

  • 一个网页形成过程

    摘要:一个网页从我们输入网址到打开经历了以下步骤。如果没有或记录已经过期,则向域名解析服务器发送解析请求。服务器收到请求,产生响应,并将网页发送给负载均衡服务器。负载均衡服务器将网页传递给链处理,之后发回给我们的浏览器。 一个网页从我们输入网址到打开经历了以下步骤。 showImg(https://segmentfault.com/img/bVbpfj2?w=232&h=555); DNS...

    WelliJhon 评论0 收藏0
  • CORS跨域与Nginx反向代理跨域优劣对比

    摘要:最近写了一些关于前后端分离项目之后,跨域相关方案的基本原理和常见误区的帖子,主要包括和反向代理。反向代理此时后端相当于不跨域,和正常请求一致,无需额外配置。 最近写了一些关于前后端分离项目之后,跨域相关方案的基本原理和常见误区的帖子,主要包括CORS和Nginx反向代理。这两种方案项目中都有在用,各有优缺,关于具体使用哪种方案,大家的观点也不大一致,本文主要就此展开一下,从前后端及服务...

    yiliang 评论0 收藏0
  • Nginx前端设置反向代理,后端Apache如何获取访客真实IP,结合PHP。

    摘要:总结在作为反向代理的架构中,的其他语言也是类似的名称拿到的将会是代理的地址。本意就是远程的地址,是代理层,转发请求到,获取到的远程地址实际上是反向代理服务器,这是符合协议规则的。 nginx反向代理后,在应用中取得的ip都是反向代理服务器的ip,取得的域名也是反向代理配置的url的域名,解决该问题,需要在nginx反向代理配置中添加一些配置信息,目的将客户端的真实ip和域名传递到应用程...

    OpenDigg 评论0 收藏0
  • Nginx前端设置反向代理,后端Apache如何获取访客真实IP,结合PHP。

    摘要:总结在作为反向代理的架构中,的其他语言也是类似的名称拿到的将会是代理的地址。本意就是远程的地址,是代理层,转发请求到,获取到的远程地址实际上是反向代理服务器,这是符合协议规则的。 nginx反向代理后,在应用中取得的ip都是反向代理服务器的ip,取得的域名也是反向代理配置的url的域名,解决该问题,需要在nginx反向代理配置中添加一些配置信息,目的将客户端的真实ip和域名传递到应用程...

    Richard_Gao 评论0 收藏0
  • docker进阶,nginx部署几个重要点详解以及开发流程---持续更新

    摘要:无论这个连接是外部主动建立的,还是内部建立的。协议有表示层数据的表示安全压缩。在整个发展过程中的所有思想和着重点都以一种称为的文档格式存在。 部署基础知识url:协议://网站地址:端口(/)路径地址?参数eg: http://www.baidu.com:80/abc/dd/ www.baidu.com找服务器 80端口:找服务器上提供服务的应用 nginx uri:/ab...

    KunMinX 评论0 收藏0

发表评论

0条评论

Lsnsh

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<