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

2023-02-04 0 413

大背景

合作开发有两个服务项目布署在阿里云上,倚赖阿里云的CLB(LX1阻抗平衡)曝露服务项目,因严格要求,CLB和后端服务项目间须要透过自有Nginx做全权,流形图如下表所示,

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

应用领域流形

操作方式

应用领域程序的允诺历经了三层全权,这儿CLB和Nginx都要做实用性。

1,实用性CLB

CLB的实用性非常简单,在实用性“窃听”时,要附带“X-Forwarded-For”HTTP头表头

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

附带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后端服务收到真实的客户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: , ,

最左边的值是应用领域程序的IP,前面的值是全权服务项目器的IP,时间顺序上,最右边的全权IP是最后访问的全权。这也就是为什么他们要重新加入选项“set_real_ip_from”的原因。

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务