我正在尝试将这两个 Nginx 位置定义合并为一个
location /v1/login {
proxy_pass http://upstream/v1/login;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass_header Authorization;
}
location /v1/logout {
proxy_pass http://upstream/v1/logout;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass_header Authorization;
}
所以我想这样的东西应该可以完成这个工作
location ^~ /v1/(login|logout) {
rewrite ^/v1/(.*)$ /v1/$1 break;
proxy_pass http://upstream;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
但无论如何我都无法让它工作。我做错了什么?我已经尝试了所有可能的重写正则表达式组合。
答案1
你尝试过这个吗?
location ~ ^/v1/(login|logout) {
proxy_pass http://upstream/v1/$1;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
编辑:
您还可以将以下指令与您的proxy_pass_header Authorization;
指令一起添加:
proxy_set_header Authorization $http_authorization;
答案2
这个简单的问题有什么问题?
location /v1/ {
proxy_pass http://upstream/v1/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
答案3
您没有将完整的 URL 传递给proxy_pass
。请尝试以下操作:
location ~ ^/v1/(login|logout) {
proxy_pass http://upstream;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}