这是我的配置:
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;
}
当我打开时,localhost:80
我也看到了 的内容localhost:49213
。我觉得不对。 Nginx 应该拒绝所有没有 HTTP header 的请求beta.example.com
,Host
对吗?为什么它没有发生?
答案1
好的,这就是答案。具有空的服务器server_name
必须声明为“默认”服务器。更多详细信息请参见此处:http://nginx.org/en/docs/http/ngx_http_core_module.html#server_name
Nginx,当Host
HTTP 标头与任何 s 不匹配时server
,如果没有另外指定,则进入默认标头,即第一个标头。这是有效的配置:
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;
}