原文地址:http://313968.blog.51cto.com/303968/895672
使用nginx做负载均衡或http代理时,碰到http header不转发的问题。
配置里只有转发设置原始ip和host的
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Server $host;
但我自定义的header却都忽略掉了。百思不得其解:
1、理论上转发header是基本功能啊,apache都没问题
2、网上也搜不到此类问题说明
3、可能大家都不用客户端自定义提交header?
打开nginx的debug:
配置中:
daemon off;
error_log logs/error.log debug;
看error_log
发现解析header时出现:
2010/12/13 18:49:06 [info] 6248#1476: *1 client sent invalid header line: “wiz_api_version: 2″ while reading client request headers, client: 223.254.100.103, server: localhost, request: “POST /wizkm/a/upload HTTP/1.1″
明显是忽略掉了我自定义的header。
差点绝望。还好开源软件可以看源码。
找出个所以然,果然被我找到问题了:
rc = ngx_http_parse_header_line(r, r->header_in, cscf->underscores_in_headers);
if (r->invalid_header && cscf->ignore_invalid_headers)
在ngx_http_parse_header_line() 函数中
if (ch == ‘_’) {
if (allow_underscores)
else
红色部分就是问题所在了
原来是对header name的字符做了限制,默认 underscores_in_headers 为off,表示如果header name中包含下划线,则忽略掉。
恰好我自定义的header中都是用的下划线。
处理办法:
1:配置中http部分 增加underscores_in_headers on; 配置
2:用减号-替代下划线符号_,避免这种变态问题。nginx默认忽略掉下划线可能有些原因。
相关推荐
然而,有时我们可能会遇到PHP无法正确获取自定义Header参数的问题。本篇文章将详细解析这一问题,并提供解决方案。 首先,理解PHP如何处理HTTP头至关重要。PHP本身并不直接处理HTTP请求,而是通过服务器环境变量来...
nginx 版本 1.11.3 使用大家说的以下配置,验证无效,跨域问题仍然存在 add_header 'Access-Control-Allow-Origin' '*'; add_header 'Access-Control-Allow-Credentials' 'true'; add_header 'Access-Control-Allow...
结合提供的文件名,我们可以推断,`2nginx response.png`可能展示了Nginx添加自定义响应头的结果,`1request header中添加apiversion.png`可能描绘了在请求头中添加`apiversion`字段的过程,而`Nginx居然还能实现...
开发网关项目时,在请求时往请求头header中放入了签名sign_key信息,在接收请求时再从header中拿出,在本地调试时是可以的,但上线之后通过Nginx代理之后发现拿不到。 location / { proxy_set_header X-Real-IP $...
一、什么是跨域问题 在一个服务器A里放置了json文件,另一个服务器B想向A发送ajax请求,获取此文件,会发生错误。 Chrome提示: XMLHttpRequest cannot load ******. No 'Access-Control-Allow-Origin' header is ...
(a)客户端首次发起访问请求,nginx接收后,发现请求头没有cookie,则以轮询方式将请求分发给后端服务器。 (b)后端服务器处理完请求,将响应数据返回给nginx。 (c)此时nginx生成带route的cookie,返回给...
upstream模块是实现这一功能的关键部分,它允许我们定义一组服务器,Nginx会根据预设的策略(如轮询、最少连接、IP哈希等)将请求转发到这些服务器。 在"nginx-upstream-jvm-route"中,"jvm-route"表示Nginx与Java...
《headers_more_nginx_module_0.34:深入解析Nginx扩展模块的增强功能》 在Web服务器领域,Nginx以其高性能、高并发能力而广受赞誉。而headers_more_nginx_module作为Nginx的一个扩展模块,进一步提升了其在处理...
在Nginx中配置TCP转发,可以将客户端的TCP请求透明地转发到后端服务器,实现负载均衡、安全控制等功能。 要配置Nginx进行TCP代理转发,我们需要创建一个新的Nginx配置文件,通常放在`/etc/nginx/conf.d/`目录下,...
在 `logs` 目录下,Nginx 的日志文件记录了服务器的运行状态和错误信息,这对于诊断问题和优化性能至关重要。`nginx` 和 `nginx.pid` 可能是用于启动和停止 Nginx 服务的脚本和进程 ID 文件。 7. **源代码** `src...
这些设置会影响Nginx如何存储来自后端服务器的数据,防止因缓冲区不足导致的问题。 5. **错误处理**:为避免WebSocket连接中的异常情况,如后端服务器下线,可以添加错误页面或者重试机制。例如: ```nginx ...
因为架构的需要采用多级 Nginx 反向代理,但是后端的程序获取到的客户端 IP 都是前端 Nginx 的 IP,问题的根源在于后端的 Nginx 在 HTTP Header 中取客户端 IP 时没有取对正确的值。 同样适用于前端是 Squid 或者...
nginx Header 转发灰度测试配置详解 在本文中,我们将详细介绍如何使用 Nginx 实现 Header 转发灰度测试。灰度测试是一种重要的测试方法,可以帮助我们在不影响生产环境的情况下,测试新的服务或功能。我们将使用 ...
它广泛用于静态资源服务、动态内容转发和负载均衡等场景。 **HTTP FLV Module**是Nginx的一个扩展模块,主要用于支持流媒体服务,特别是Flash Video(FLV)格式的实时流传输。这个模块允许Nginx直接处理FLV流,使得...
### Nginx 转发 SFTP 和 FTP 的配置详解 #### 一、引言 在互联网技术领域中,Nginx(发音为 “engine X”)是一款高性能的HTTP和反向代理服务器,同时它也支持邮件代理服务。随着版本的不断更新与优化,Nginx 在...
大家都知道,nginx配置文件通过使用add_header指令来设置response header。 昨天无聊用curl查看一个站点的信息,发现返回的头部与想象中的不一样: HTTP/2 200 date: Thu, 07 Feb 2019 04:26:38 GMT content-type: ...
在IT行业中,Nginx是一款广泛应用的高性能Web服务器和反向代理服务器,它以...如果你需要自定义Nginx的配置或更新模块,可以根据上述步骤进行操作。同时,理解Nginx的编译和配置过程对于管理和优化服务器性能至关重要。
nginx-add-custom-header 简介 使用openresty写的一个扩展。 添加一个自定义的header--x-mls-logid,用来追踪接口之间的调用流程。 测试环境 MacOSX 10.10.3 8GB i5 openresty 1.7.2.1 PHP 5.4.38 测试结果 使用wrk...
javascript_nginx/1.10.2_nginx转发海康_"表明我们讨论的主题是关于Nginx 1.10.2版本,特别是如何利用它来实现对海康摄像头的实时预览功能,并涉及到JavaScript在其中的作用。海康摄像头是一种广泛应用的安防监控...
nginx sticky是nginx的module,可以实现基于cookie的负载均衡。 下载后,在编译安装nginx时,用--add-module选项,指到sticky所在目录。类似命令如下: ./configure --prefix=/usr/local/nginx-1.6.0 --add-module=...