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;
}
正则表达式位置块的评估顺序很重要。请参阅这个文件了解详情。