nginx采用反向代理的时候使用变量的坑
nginx采用反向代理的时候使用变量的坑
正常情况:
location ~ ^/prod-api(?<rest>/.*)?$ {# 假设 $mes_backend 形如: http://127.0.0.1:16889proxy_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;...其他内容
}