为什么 Nginx 不拒绝错误的主机?

为什么 Nginx 不拒绝错误的主机?

这是我的配置:

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.comHost对吗?为什么它没有发生?

答案1

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

Nginx,当HostHTTP 标头与任何 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;
}

相关内容