大背景
合作开发有两个服务项目布署在阿里云上,倚赖阿里云的CLB(LX1阻抗平衡)曝露服务项目,因严格要求,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: , ,
最左边的值是应用领域程序的IP,前面的值是全权服务项目器的IP,时间顺序上,最右边的全权IP是最后访问的全权。这也就是为什么他们要重新加入选项“set_real_ip_from”的原因。