请求优化NGINX Plus配置:动态传递Host头并设默认值
NGINX Plus 配置调整:传递Host请求头并设置默认值
要实现传递请求中的Host头,若请求未携带则使用默认值,你需要做两处关键修改:
- 在
http块中添加map指令,定义一个用于代理的Host变量,自动判断是否启用默认值 - 在代理的
location块中,配置proxy_set_header使用该变量,同时优化proxy_pass以复用已定义的upstream
调整后的完整配置文件
http { resolver 172.10.0.10 valid=10s ipv6=off; # 定义代理用的Host变量:有请求头则用请求头,无则用默认值demo-server.com map $http_host $proxy_host { default $http_host; "" "demo-server.com"; } upstream demo { zone demoservers 64k; server demo-server.com:443 resolve; } server { listen 443 ssl; location / { # 复用upstream配置,而非直接写域名 proxy_pass https://demo; proxy_ssl_server_name off; # 传递Host头:使用map定义的变量,自动 fallback 到默认值 proxy_set_header Host $proxy_host; } } server { listen 8080; location /api { api write=off; # directives limiting access to the API } location = /test.html { root /usr/share/nginx/html; } # Redirect requests made to the pre-NGINX Plus API dashboard location = /test1.html { return 301 /test.html; } } }
关键说明
map $http_host $proxy_host:该指令根据请求的Host头(即$http_host变量)生成$proxy_host变量。当请求未携带Host头时,$http_host为空字符串,此时$proxy_host会被设为默认值demo-server.comproxy_pass https://demo:复用已定义的upstream块,能更好地利用resolve和zone功能实现动态域名解析和连接池管理proxy_set_header Host $proxy_host:将处理后的Host头传递给后端服务器,确保后端收到的Host符合预期
内容的提问来源于stack exchange,提问作者kamaraj Muthupandian
相关产品推荐
相关产品推荐

