nginx proxy_pass 头信息处理

简介

有些应用需要验证请求和响应的头部信息。而现在的架构基本都会在前端使用nginx进行转发。如果没有处理头部信息,就会导致信息丢失,无法通过验证,出现403等请求异常的情况。



nginx指令proxy_set_header和add_header

proxy_set_header和add_header是nginx处理头部信息的指令



proxy_set_header是处理转发的请求头给后端

后端需要获取真实的远端IP,可以通过X-Real-IP进行设置

proxy_set_header X-Real-IP $remote_addr;

X-Real-IP是一个自定义头。X-Real-Ip 通常被 HTTP 代理用来表示与它产生 TCP 连接的设备 IP,这个设备可能是其他代理,也可能是真正的请求端。需要注意的是,X-Real-Ip 目前并不属于任何标准,代理和 Web 应用之间可以约定用任何自定义头来传递这个信息

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

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

X-Forwarded-For请求头格式非常简单: X-Forwarded-For:client, proxy1, proxy2

也有可能需要再处理域名,也需要讲Host字段传递给后端

proxy_set_header Host $host;

add_header是nginx响应给浏览器的头部信息



将后端的请求头,返回到浏览器中

add_header Access-Control-Allow-Headers $http_access_control_request_headers;

头信息限制

nginx对头部信息做了限制,不能含有下划线,可以用驼峰式的命名,或者用 - ,如果含有下划线的头信息默认会直接被丢弃。

也可以通过设置参数修改这个限制,直接http配置节加上

underscores_in_headers on;


相关文章

Nginx之进程间通信-共享内存篇

前面我们介绍了Nginx的多进程模型,多个worker进程间通信 主要是用共享内存来实现的。今天我们就来学习下Nginx的共享内存。那么进程该如何创建共享内存呢?如果按照使用我们的malloc来分配...

Linux 系统信息命令大全,极其详细!

在日常运维、排障、性能优化或系统审计中,我们常常需要了解 Linux 系统的详细信息,包括内核版本、硬件配置、内存、磁盘、网络状态、进程负载等。掌握这些信息命令,不仅能让你看清系统运行的“全貌”,更是...

Nginx之http模块是如何解析http请求的,6个步骤一目了然-02

解析http请求:在解析http请求之前,我们先来复习下http请求包含的各个部分及每个部分的协议格式。一个http请求一般由 请求行、请求头、请求体、响应行、响应头、响应体 这6个部分组成。我们就以...

Nginx熔断操作:一行代码搞定临时流量控制!

直接在目标接口的location块中添加if判断,通过注释/取消注释一行代码,即可轻松控制熔断状态!无需复杂指令,简单高效!快速配置示例快速实现熔断!示例:熔断/api/order接口server {...

Nginx实现认证登录

Nginx 是一个很强大的高性能Web和反向代理服务,本配置实现Nginx认证登录以免重要信息暴露在公网。ngx_http_auth_basic_module模块实现让访问者访问,只有输入正确的用户密...