我正在尝试将 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 不关注Host
HTTP 标头,只是将所有内容重定向到第一个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;
}