nginx采用反向代理的时候使用变量的坑
正常情况:
conf
location ~ ^/prod-api(?<rest>/.*)?$ {
# 假设 $mes_backend 形如: http://127.0.0.1:16889
proxy_pass $mes_backend$rest$is_args$args;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# WebSocket 支持
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
# 可选:更稳的请求体转发
proxy_request_buffering on;
client_max_body_size 10m;
proxy_read_timeout 60s;
}
如果你使用变量,仍会把请求转到后端的根路径(或保留了错误的前缀)
预期是 http://域名/prod-api/XXX 到后端是 http://localhost:16888/XXX
实际上到后端是 http://localhost:16888/prod-api/XXX
set $mes_backend http://127.0.0.1:16889;
location /prod-api/ {
proxy_pass $mes_backend;
... 其他代理内容
}
正确写法
location ~ ^/prod-api(?<rest>/.*)$ {
# proxy_pass http://127.0.0.1:16889/;
# 采用变量的形式,如果是常量的形式就没有这种异常
proxy_pass $mes_backend$rest;
...其他内容
}