如何配置 nginx 进行多站点反向代理?

如何配置 nginx 进行多站点反向代理?

我正在尝试将 nginx 配置为同一服务器上两个网站的反向代理。这就是我所做的:

upstream alpha {     
  server localhost:49212;
}
server {     
  listen 80;
  server_name alpha.example.com;
  location / {
    proxy_pass http://alpha;     
  }   
}
upstream beta {     
  server localhost:49213;
}
server {     
  listen 80;
  server_name beta.example.com;
  location / {
    proxy_pass http://beta;     
  }   
}
server {
  listen 80;
  server_name "";
  return 444;
}

它启动后不会发出任何抱怨。然后,当我打开alpha.example.com或时beta.example.com- 我总是以 结束http://localhost:49212。此外,无论我在端口 80 上打开什么 URL,http://localhost:49212都会呈现。

这不是我所期望的。我只希望http://alpha.example.com重定向/代理http://localhost:49212,而不需要其他任何东西。看起来 nginx 不关注HostHTTP 标头,只是将所有内容重定向到第一个upstream

怎么了?

答案1

好的,答案如下。空的服务器server_name必须声明为“默认”服务器。更多详细信息请参见:http://nginx.org/en/docs/http/ngx_http_core_module.html#server_name

Host当HTTP 标头与任何 s 都不匹配时, Nginxserver将进入默认设置,即第一个,除非另有指定。以下是有效的配置:

upstream alpha {     
  server localhost:49212;
}
server {     
  listen 80;
  server_name alpha.example.com;
  location / {
    proxy_pass http://alpha;     
  }   
}
upstream beta {     
  server localhost:49213;
}
server {     
  listen 80;
  server_name beta.example.com;
  location / {
    proxy_pass http://beta;     
  }   
}
server {
  listen 80 default_server; # pay attention!
  server_name "";
  return 444;
}

相关内容