nginx proxy X-Forwarded-For

简介:

 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 在nginx配置中,严谨一点来说这配置使用在作为代理的nginx中。


通过名字就知道,X-Forwarded-For 是一个扩展头。HTTP/1.1(RFC 2616)协议并没有对它的定义,它最开始是由 Squid 这个缓存代理软件引入,用来表示 HTTP 请求端真实 IP,现在已经成为事实上的标准,被各大 HTTP 代理、负载均衡等转发服务广泛使用,并被写入 RFC 7239 (Forwarded HTTP Extension)标准之中。


用途: 可以获取真实的代理路径经过的各个代理的IP,记录日志中。


最简单的一个模型



client  ----- nginx proxy------ngxin server



在proxy代理中加入一下配置:

1
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;


server {

        listen       80;

        server_name  bbs.test.com;

        location / {

            proxy_pass http://192.168.100.10;   #代理到nginx server

            root   html;

            index  index.html index.htm;

        }


nginx proxy 和 nginx server的日志格式:

1
2
3
  log_format  main   '$remote_addr $remote_user [$time_local] "$request" '
             '$status $body_bytes_sent "$http_referer" '
             '"$http_user_agent" "$http_x_forwarded_for"' ;




模拟实验讲述这个原理过程


clinet 192.168.100.20

nginx proxy 192.168.100.13

nginx server 192.168.100.10




client发起一个请求(hosts已经解析  192.168.100.20  bbs.test.com)

curl -I bbs.test.com


查看nginx proxy处的日志: http_x_forwarded_for 字段为: "-"

查看nginx server处的日志: http_x_forwarded_for 字段 为: "192.168.100.20"



client再发起一个请求:

查看nginx proxy处的日志: http_x_forwarded_for 字段为: "1.1.1.1"

查看nginx server处的日志: http_x_forwarded_for 字段 为: "1.1.1.1, 192.168.100.20"



其实这个过程就是

1 nginx proxy接收到了client的请求,发现里面请求里面的X-Forwarded-For字段为1.1.1.1 所以ngixn写入日志的 http_x_forwarded_for的字段值为1.1.1.1


2 由于作为了这个请求的代理,然后ngixn设置了代理

1
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

的操作,将自己的X-Forwarder-For http头部字段进行了修改,等于$proxy_add_x_forwarded_for(原有 的加上自己的IP,IP以逗号隔开) 值就为"1.1.1.1, 192.168.100.20"


3 nginx server受到代理发过来的请求,自然记录nginx日志的时候读取X-Forwarded-For字段的值的时候,值为 "1.1.1.1, 192.168.100.20"

本文转自残剑博客51CTO博客,原文链接http://blog.51cto.com/cuidehua/1827125如需转载请自行联系原作者


cuizhiliang

相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
相关文章
|
Cloud Native 应用服务中间件 网络安全
15.1k Star! 一个不用会 Nginx 的反向代理神器 - Nginx Proxy Manager
应用简览 Nginx Proxy Manager 是一个开源的反向代理工具,不需要了解太多 Nginx 或 Letsencrypt 的相关知识,即可快速将你的服务暴露到外部环境,并且支持 SSL 配置。
759 0
|
应用服务中间件 网络安全 nginx
轻松上手Nginx Proxy Manager:安装、配置与实战
Nginx Proxy Manager (NPM) 是一款基于 Nginx 的反向代理管理工具,提供直观的 Web 界面,方便用户配置和管理反向代理、SSL 证书等。本文档介绍了 NPM 的安装步骤,包括 Docker 和 Docker Compose 的安装、Docker Compose 文件的创建与配置、启动服务、访问 Web 管理界面、基本使用方法以及如何申请和配置 SSL 证书,帮助用户快速上手 NPM。
13788 1
|
应用服务中间件 网络安全 nginx
使用Nginx Proxy Manager配置Halo的反向代理和申请 SSL 证书
本文引导如何用Nginx Proxy Manager (NPM)配置Halo的反向代理与SSL证书。NPM简化了Nginx的配置流程,适合无Nginx基础的用户。安装NPM无需额外安装Nginx,避免端口冲突。通过`docker-compose.yaml`启动NPM服务,并映射必要的端口。配置Halo反向代理需登录NPM面板,添加代理主机,设置域名、转发IP等参数。NPM支持自动申请与续期SSL证书,确保网站安全访问。更多Halo安装细节,请参考[如何在Linux云服务器上通过Docker Compose部署安装Halo](https://zhangfeidezhu.com/?p=631).
1276 0
使用Nginx Proxy Manager配置Halo的反向代理和申请 SSL 证书
|
负载均衡 监控 网络协议
在nginx中使用proxy protocol协议
我们已经介绍了haproxy提出的proxy protocol协议,通过proxy protocol协议,服务器端可以获得客户端的真实IP地址和端口,从而可以进行一些非常有意义的操作。 为什么获得客户端的真实IP地址会非常有意义呢?
|
JSON JavaScript 前端开发
vue2_vite.config.js的proxy跨域配置和nginx配置代理有啥区别?
vue2_vite.config.js的proxy跨域配置和nginx配置代理有啥区别?
908 1
|
监控 应用服务中间件 nginx
|
Kubernetes 应用服务中间件 nginx
Nginx Proxy Manager - Docker 建站最佳伴侣
方案的关键技术为 `Docker + Nginx` 的组合。
823 0
|
缓存 应用服务中间件 nginx
Nginx Proxy Cache原理和最佳实践(上)
Nginx Proxy Cache原理和最佳实践
636 0
Nginx Proxy Cache原理和最佳实践(上)
|
存储 缓存 搜索推荐
Nginx Proxy Cache原理和最佳实践(下)
Nginx Proxy Cache原理和最佳实践
1001 0