代理传递中的 Nginx 变量不起作用

Sye*_*ruf 6 nginx proxypass

proxy_pass 可以使用变量吗?我正在尝试使以下配置工作:

    http {
       ...

        map $http_user_agent $myvariable {
            default 'mobile';    

        }

       ...
    }
Run Code Online (Sandbox Code Playgroud)

位置配置:

server {
    listen       80;

   ...

    location /site {        
            proxy_pass http://docker-site/site/$myvariable;
        }

   ...
}
Run Code Online (Sandbox Code Playgroud)

如果我将 proxy_pass 替换为http://docker-site/site/mobile;

让我知道我是否走在正确的轨道上。

Ric*_*ith 6

这两个案例并不相同。如果您使用变量,该值将替换整个 URI。

在这种情况下:

location /site { 
    proxy_pass http://docker-site/site/mobile;
}
Run Code Online (Sandbox Code Playgroud)

URI/site/foo作为 向上游传递/site/mobile/foo

要使用变量,您可以使用重写(有关详细信息,请参阅本文档):

location /site { 
    rewrite ^/site(.*)$ /site/$myvariable$1 break;
    proxy_pass http://docker-site;
}
Run Code Online (Sandbox Code Playgroud)

或者正则表达式位置:

location ~ ^/site(.*)$ {
    proxy_pass http://docker-site/site/$myvariable$1;
}
Run Code Online (Sandbox Code Playgroud)

正则表达式位置块的求值顺序很重要。有关详细信息,请参阅此文档