proxy_pass を変数にする必要があるという問題がありますが、変数にすると、バックエンド サーバーで正しく解決されません。
nginx -v
nginx version: nginx/1.6.2
これは作業中のものです:
server {
listen 443 ssl;
ssl on;
server_name api.hostname.com;
include ssl_params;
location = /v1 {
return 302 /v1/;
}
location /v1/ {
proxy_pass http://internal-api.hostname.com.us-east-1.elb.amazonaws.com/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
これは壊れたものです
server {
listen 443 ssl;
ssl on;
server_name api.hostname.com;
include ssl_params;
location = /v1 {
return 302 /v1/;
}
location /v1/ {
resolver 10.0.0.2;
set $backend "http://internal-api.hostname.com.us-east-1.elb.amazonaws.com/";
proxy_pass $backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
動作中のhttps://api.hostname.com/v1/profileのバックエンド結果は次のとおりです。
<-- GET /profile
--> GET /profile 200 16ms 349b
しかし、壊れたものに
<-- GET /
--> GET / 401 1ms 12b
私は試してみました:
set $backend "internal-api.hostname.com.us-east-1.elb.amazonaws.com";
proxy_pass http://$backend/
set $backend "internal-api.hostname.com.us-east-1.elb.amazonaws.com/";
proxy_pass http://$backend/
proxy_pass で変数を使用しているときはいつでも、すべてがバックエンドの / (ルート) に転送されますが、意図したものではありません。