nginx获得自定义参数
转自:http://blog.csdn.net/vaal_water/article/details/6004372
公司的网站要加入动态加速 一个直接的问题是经过转发 客户端请求的头被改了一部分 remote_addr这个被改成了自定义的True-Client-IP 为了不改动已有的程序 需要在nginx那转发的时候把这个头重新打到Remote_Addr 上
要实现这个 有两个关键点 现记录如下。
1 ,nginx 设置 header 搜索下很容易找到这样的例子
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
但对自定义的头怎么取 就没什么例子了 经过反复摸索 发现nginx要取自定义的变量是这样的
$http_自定义header名 这里要注意 header名要都转成小写 中划线改成下划线
比如我们的 True-Client-IP 到nginx里 用 $http_true_client_ip就可以接收到了
proxy_set_header Remote_Addr $http_true_client_ip;
2. 因为不是所有的域名都加速了 所有有的请求是有 True-Client-IP 有的没有 ,nginx要判断下 ,没有那个头的 就转发remote_addr到后台
开始我是这么写的
if($http_true_client_ip != ''){
proxy_set_header Remote_Addr $http_true_client_ip;
}
会报 "proxy_set_header" directive is not allowed here 这个错误
G之 在 http://www.pubbs.net/200908/nginx/14399-possible-to-normalize-headers-in-nginx.html 得到方法 ,proxy_set_header 不能在if里 但 if里可以set变量
最终配置写法:
if ($http_true_client_ip != ''){
set $clientip $http_true_client_ip;
break;
}
if ($http_true_client_ip = ''){
set $clientip $remote_addr;
break;
}
proxy_set_header Remote_Addr $clientip;
注意: if 和 ( 之间一定要有空格
BTW://中文的资料就那一两篇文章转来转去...哎
PS : APACHE不能直接得到转发的IP php里用getallheaders() 看到头其实是打过来了 但 $_SERVER里 变成了
http_remote_addr 要直接得到真实IP 需要apache上安装个mod mod_rpaf
apache的第三方的mod
最 新版本是 mod_rpaf-0.6.tar.gz
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构