Nginx 重写和代理

Nginx 重写和代理

我正在尝试将这两个 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;
}

相关内容