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;...其他內容
}