Nginx proxy_set_header设置
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx proxy_set_header设置相关的知识,希望对你有一定的参考价值。
参考技术Anginx代理常用配置项
通过以下的案例来理解proxy_set_header设置
其中backend 192.168.4.122 提前安装nginx 第三方模块支持 ""echo"
=============192.168.4.119 proxy1 nginx.conf
=============192.168.4.120 proxy2 nginx.conf
=============192.168.4.121 proxy3 nginx.conf
=============192.168.4.122 backend nginx.conf
=============
有注意到 ||192.168.4.254, 192.168.4.120 是不包含192.168.4.119
proxy_set_header Host $host;
本案例因为不涉及到域名所以用不到$Host值,作用也比较好理解,就是nginx做代理时,把原http请求的Header中的Host字段也放到转发的请求里,如果不加这一行的话,nginx转发的请求header里就不会有Host字段,而服务器是靠这个Host值来区分你的请求的是哪个域名的资源的,
proxy_set_header X-Real-IP $remote_addr;
只能获取到与服务器本身直连的上层请求ip 写入到http请求头中
proxy_set_header X-Real-IP $proxy_add_x_forwarded_for;
定义客户端IP,如果多层代理都有配置这个值,离backent最近的会覆盖之前的值 所以一般只在连接客户端的代理上写添加这条值,这样backend就能获取到客户端的真实IP,单独使用无效
proxy_set_header X-Forwarded-For $http_x_forwarded_for;
把客户端IP写入到http请求头中,前提是之前有X-Real-IP $remote_addr定义过客户端IP,所以单独使用无效
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
相当于 $http_x_forwarded_for 和 $remote_addr和结合 获取上层IP和把客户端IP写入请求头中,
nginx获取真实ip,proxy_set_head怎么设置头部信息
反向代理服务器是一种代理服务器,用于管理从外部网络到内部网络的连接或任何特定请求。它保护、路由和管理从外部网络到内部网络、Web服务器或专用网络的流量。 |
nginx作为web服务器一个重要的功能就是反向代理。
当然你也可以使用nginx配置正向代理,本是介绍如何配置nginx的反向代理。
nginx反向代理的指令不需要新增额外的模块,默认自带proxy_pass指令,只需要修改配置文件就可以实现反向代理。
$proxy_add_x_forwarded_for
$http_x_forwarded_for
这两个的变量的值的区别,就在于,proxy_add_x_forwarded_for 比http_x_forwarded_for 多了一个$remote_addr的值,但是$remote_addr 只能获取到与服务器本身直连的上层请求ip,所以设置$remote_addr一般都是设置第一个代理上面;但是问题是,有时候是通过cdn访问过来的,那么后面web服务器获取到的,永远都是cdn 的ip 而非真是用户ip,那么这个时候就要用到X-FORward—for了,这个变量的意思,其实就像是链路反追踪,从客户的真实ip为起点,穿过多层级的proxy ,最终到达web 服务器,都会记录下来,所以在获取用户真实ip的时候,一般就可以设置成,proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 这样就能获取所有的代理ip 客户ip。
在打印log 的时候
$http_x_real_ip|$remote_addr
就是 用户的真是ip
配置如下
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
还有一种情况就是,客户在经过cdn请求的时候,本来$proxy_add_x_forwarded_for这里记录的值都全部都包括,但是,当你需要取值的时候,会发现,即便用排除代理ip模块。
set_real_ip_from 100.0.0.0/8;(这里是已知的代理ip)
real_ip_header X-Forwarded-For;
real_ip_recursive on;
X-Forwarded-For
里依然有多个ip,这个时候直接取值$http_x_real_ip 就好了,但是前提条件是,cdn 那边也设置了X-forward,不然,你这边获取的你认为是用户的ip 其实是cdn的ip。
原文来自:http://985.so/kUBF Linux 命令 大全: https://www.linuxcool.com/
官方站点:www.linuxprobe.com
Linux命令大全:www.linuxcool.com
Linux系统下载站:www.linuxdown.com
刘遄老师QQ:5604922
Linux技术交流群:193666693
(新群,火热加群中……)
书籍在线学习(电脑阅读效果佳):
http://www.linuxprobe.com/chapter-00.html
想要学习Linux系统的读者可以点击"阅读原文"按钮来了解书籍《Linux就该这么学》,同时也非常适合专业的运维人员阅读,成为辅助您工作的高价值工具书!
以上是关于Nginx proxy_set_header设置的主要内容,如果未能解决你的问题,请参考以下文章
关于nginx获取真实ip,proxy_set_head设置头部信息的理解
nginx 反向代理中proxy_set_header的含义
Nginx指令add_header和proxy_set_header的区别