nginx - 有没有办法在 nginx 上添加包含代理服务器名称的响应标头?
问题描述
我们正在尝试弄清楚如何在响应标头中添加所选服务器。
现在,我们使用$upstream_addr来获取ip address 和 port,它可以工作,但是有没有办法获取服务器主机名而不是 ?(正如在“上游”块中声明的那样)
这是我们的(简化的)nginx 配置:
upstream my_upstream {
ip_hash;
server production001 max_fails=2 fail_timeout=15s;
server production002 max_fails=2 fail_timeout=15s;
}
server {
listen 80;
server_name domain.com;
location / {
proxy_pass http://my_upstream ;
add_header X-Upstream $upstream_addr always;
}
}
这会产生以下标题作为响应:“x-upstream: XX.XX.XX.XX:XXXX”
我们想得到什么:“x-upstream:production001”
解决方案
如果您知道上游服务器的 IP 地址,那么您可以使用地图
upstream my_upstream {
ip_hash;
server prod1:80;
server prod2:80;
server prod3:80;
}
map $upstream_addr $upstream_name {
~.*192.168.1.1:80 production1;
~.*192.168.1.2:80 production2;
~.*192.168.1.3:80 production3;
default $upstream_addr;
}
server {
listen 80;
server_name domain.com;
location / {
proxy_pass http://my_upstream ;
add_header X-Upstream $upstream_name always;
}
}
当 NGINX 尝试多个服务器时,您需要映射中的正则表达式,列表中的姓氏是响应的服务器。
推荐阅读
- c# - 使用 NServicebus saga 序列化长时间运行的端点处理程序的执行
- javascript - Bootstrap-Select 不显示 div 选项
- python - 带有 agg 的 pandas groupby 不能在多个列上工作
- excel - EXCEL 公式 - 如果其他三列之一中的值相同,则返回 true
- angular - angular6 RxJs observables 问题
- amazon-web-services - Cloudformation:如何根据用户输入配置资源
- serverless - Openwhisk:增加并发请求的数量
- php - PHP Array 如何匹配并输出不同的值?
- javascript - 在 I18n RoR 中切换语言的浮动页脚
- cordova - 离子原生联系人cordova插件已弃用?有什么选择吗?