我正在运行nginx作为站点example.com的反向代理来加载在后端服务器中运行的ruby应用程序.我proxy_set_header在nginx中有以下字段,它将主机头传递给后端ruby.ruby app需要这个来识别子域名.
location / {
proxy_pass http://rubyapp.com;
proxy_set_header Host $http_host;
}
Run Code Online (Sandbox Code Playgroud)
现在我想创建一个别名beta.example.com,但是传递给后端的主机头应该仍然是www.example.comruby应用程序将拒绝请求.所以我想要一些类似于下面的location location指令.
if ($http_host = "beta.example.com") {
proxy_pass http://rubyapp.com;
proxy_set_header Host www.example.com;
}
Run Code Online (Sandbox Code Playgroud)
做这个的最好方式是什么?
emk*_*a86 26
你不能在if块中使用proxy_pass,所以我建议你在设置代理头之前做这样的事情:
set $my_host $http_host;
if ($http_host = "beta.example.com") {
set $my_host "www.example.com";
}
Run Code Online (Sandbox Code Playgroud)
现在你可以使用proxy_pass和proxy_set_header而不用if:
location / {
proxy_pass http://rubyapp.com;
proxy_set_header Host $my_host;
}
Run Code Online (Sandbox Code Playgroud)
Ber*_*set 19
map优于set + if.
map $http_host $served_host {
default $http_host;
beta.example.com www.example.com;
}
server {
[...]
location / {
proxy_pass http://rubyapp.com;
proxy_set_header Host $served_host;
}
}
Run Code Online (Sandbox Code Playgroud)