我正在运行nginx作为站点example.com的反向代理来加载在后端服务器中运行的ruby应用程序 . 我在nginx中有以下 proxy_set_header
字段,它将主机头传递给后端ruby . ruby app需要这个来识别子域名 .
location / {
proxy_pass http://rubyapp.com;
proxy_set_header Host $http_host;
}
现在我想创建一个别名 beta.example.com
,但是传递给后端的主机头应该仍然是 www.example.com
否则ruby应用程序将拒绝这些请求 . 所以我想要一些类似于下面的location location指令 .
if ($http_host = "beta.example.com") {
proxy_pass http://rubyapp.com;
proxy_set_header Host www.example.com;
}
做这个的最好方式是什么?
3 回答
你不能在if块中使用 proxy_pass ,所以我建议在设置代理头之前做这样的事情:
现在你只需使用 proxy_pass 和 proxy_set_header ,如果阻止:
map优于设置if .
只是一个小小的提示 . 有时您可能需要使用 X-Forwarded-Host 而不是 Host 标头 . 这是我的情况,其中Host头工作但仅适用于标准HTTP端口80.如果应用程序在非标准端口上公开,则当应用程序生成重定向时此端口丢失 . 最后对我有用的是: