upstream apache {
server 127.0.0.1:8080;
}
server{
location ~* ^/service/(.*)$ {
proxy_pass http://apache/$1;
proxy_redirect off;
}
}
Run Code Online (Sandbox Code Playgroud)
上面的代码片段会将url包含字符串"service"的请求重定向到另一台服务器,但它不包含查询参数.
我使用一个变量来定义我的 proxy_pass 目标,与此答案类似,但在我的情况下,该值是从传入请求的查询参数中提取的,因此例如 /?url= http://example.com将被代理到example.com。由于 proxy_pass 参数是一个变量,因此我的配置中没有上游指令。代理工作正常。然而,连接在每次请求后都会关闭,我希望它们活着来分摊 TCP 握手。根据这些指示,这需要在上游指令中使用 keepalive 指令。如果没有上游指令,我该如何做到这一点?
这是我的完整配置:
server {
if ($arg_url ~ \/\/([^\/]*)) {
set $proxy_host $1;
}
if ($proxy_host = "") {
return 404;
}
resolver 8.8.8.8;
location / {
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_set_header Host $proxy_host;
proxy_pass $arg_url;
}
}
Run Code Online (Sandbox Code Playgroud) 当 proxy_pass 设置为变量时,Nginx 似乎不支持重定向。有没有办法实现此功能,例如以某种方式链接服务器或其他解决方法?不支持这个的原因是什么?
.conf 是:
proxy_pass $var;
proxy_redirect default;
Run Code Online (Sandbox Code Playgroud)
我收到的错误消息是:
nginx:[emerg]“proxy_redirect default”不能与带有变量的“proxy_pass”指令一起使用
我在Kubernetes上运行Nginx.
当我使用以下proxy_pass指令时,它按预期工作:
proxy_pass "http://service-1.default";
Run Code Online (Sandbox Code Playgroud)
但是以下不起作用:
set $service "service-1";
proxy_pass "http://$service.default";
Run Code Online (Sandbox Code Playgroud)
我收到一个错误说 no resolver defined to resolve service-1.default
据我所知proxy_pass,收到完全相同的字符串,为什么它表现不同?
我需要使用变量,因为我正在使用正则表达式从URL动态获取服务名称.