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代理中加入一下配置:

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的日志格式:

 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设置了代理

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"

时间: 2024-08-06 07:26:58

nginx proxy X-Forwarded-For的相关文章

Nginx Proxy timeout排错

一.环境 当前的环境为nginx作为前端反向代理,upstream为两台tomcat. 二.原因 由于最近项目属于初期阶段,平日加班也比较多,刚好碰到一天没有什么问题的时间,我早早的收拾装备开心的坐上了地铁奔向家里. 此时,听着音乐的我快乐的坐在地铁上,突然音乐戛然而止,响起了来电的铃音.一种不好的预感油然而生,看来是有问题了.于是乎我拿出电话看到了我们老大的名字闪现在手机屏幕上,深呼一口气,接起电话.就听见我们老大说现在客户端那边报错等什么什么的.由于地铁里杂音很大,信号又不是太好,就没细问.

nginx proxy超时报错 upstream timed out (110: Connec...

环境介绍 服务器:centos6.4服务:nginx proxy 问题描述: 然后查找  /opt/usr/nginx/1.4.0/logs  错误 error.log日志提示如下 2015/01/04 15:44:13 [error] 10112#0: *994662 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 117.32.232.172

终于成功配置 nginx + proxy

今天晚上折腾两个小时,终于成功配置 nginx + proxy 支持以下访问地址,使用的是同一个Flask APP. https://search.readmorejoy.com/ https://markdown.readmorejoy.com/ 初次的学习总是比较折磨人. 单独出 markdown,是因为还要出一个 PC版本 原文地址:https://www.cnblogs.com/pycoding/p/11360979.html

nginx Proxy 配置

1.代理模块 ngx_http_proxy_module 2.代理配置 代理Syntax: proxy_pass URL; #代理的后端服务器URLDefault: —Context: location, if in location, limit_except 头信息Syntax: proxy_set_header field value;Default: proxy_set_header Host $proxy_host; #设置真实客户端地址 proxy_set_header Connec

线上nginx proxy buffer导致的性能问题

最近有一个项目访问量突然变大,但发现前端的nginx负载会很高,导致出现4xx和5xx的异常,响应时间也变长了.今天有时间,解决了一下.下面记录一下解决思路和方法.我们这个项目部署在azure.最前端是azure 的负载均衡器(lb),lb后面是2台nginx主机,型号是D2v3(2核8G).在我们实际使用中,一台nginx主机rpm达到30k,cpu,内存,网络都是没有任何压力的.所以一台主机支持的最大访问量应该远远大于30k.但今天这个项目rpm撑到3k的时候,系统负载就很高了.这个项目后端

nginx proxy优化

常用优化要点 当nginx用于反向代理时,每个客户端将使用两个连接: 一个用于响应客户端的请求,另一个用于到后端的访问: 如果机器是两核CPU,例如: 1 2 $ grep ^proces /proc/cpuinfo | wc -l 2 那么,可以从如下配置起步: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 # One worker per CPU-core. worker_processes  2; events {     worker_connections  809

nginx Proxy Cache 配置

总结一下 proxy cache 设置的常用指令及使用方法: proxy_cache proxy_cache zone | off 配置一块公用的内存区域的名称,该区域可以存放缓存的索引数据.注意:zone 代表用于存放缓存索引的内存区域的名称(需要使用 proxy_cache_path指令设置):off 代表关闭Proxy Cache功能 proxy_cache_path proxy_cache_path path [levels=levels] keys_zone=name:size [in

Aliyun OSS Nginx proxy module(阿里云OSS Nginx 签名代理模块)

1.此文章主要介绍内容 本文主要介绍怎样利用Nginx lua 实现将阿里云OSS存储空间做到同本地磁盘一样使用.核心是利用Nginx lua 对OSS请求进行签名并利用内部跳转将全部訪问本地Nginx的请求加上OSS 签名转发给OSS,实现本地Nginx无缝衔接阿里云OSS,存储空间无限扩展,存储成本无限下降,数据安全%99.99-- . 2.本篇文章使用到的一些工具技术及怎样学习和获取 1.lua 本文用到的都是一些主要的lua,基本上花半小时阅读下lua的语法就能够轻松理解本文内容 2.N

Nginx Proxy 的协议选择

1.nginx中的ip_local_port_range问题 # sysctl -a | grep ip_local net.ipv4.ip_local_port_range = 32768 61000 # sysctl -a | grep ip_local_port_range net.ipv4.ip_local_port_range = 10240 61000 2.nginx.conf upstream p2p_service { keepalive 50; server 127.0.0.1