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

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

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

    http {
       ...

        map $http_user_agent $myvariable {
            default 'mobile';    

        }

       ...
    }

位置配置:

server {
    listen       80;

   ...

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

   ...
}

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

请告诉我我是否走在正确的道路上。

答案1

这两种情况不一样。如果使用变量,该值将替换整个 URI。

在这种情况下:

location /site { 
    proxy_pass http://docker-site/site/mobile;
}

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

要使用你的变量,你可以使用重写(参见这个文件详情请见):

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

或者正则表达式位置:

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

正则表达式位置块的评估顺序很重要。请参阅这个文件了解详情。

相关内容