nginx 通过 http 块内的多个 server 块来管理多个主机,每个 server 块独立配置一个虚拟主机的监听端口、域名和根目录。nginx 根据请求的 host 头或 ip 地址匹配对应的 server 块来处理流量。若未找到匹配的 server,则使用默认 server 处理请求。

如何为不同域名配置独立的 server 块
在 http 块中定义多个 server 块,每个块指定不同的 listen 端口和 server_name 域名。Nginx 优先匹配 server_name,再匹配 IP 和端口。例如,example.com 和 test.com 可分别指向不同的 root 目录。

server {
listen 80;
server_name example.com;
root /var/www/example;
}
server {
listen 80;
server_name test.com;
root /var/www/test;
}
上述配置中,访问 example.com 时 Nginx 使用第一个 server 块,root 为 /var/www/example;访问 test.com 时使用第二个 server 块,root 为 /var/www/test。若请求的域名不匹配任何 server_name,则进入默认 server。
如何处理未匹配域名的请求
当请求的 Host 头不匹配任何已配置的 server_name 时,Nginx 会将其路由到默认 server 块。默认 server 通常是第一个定义的 server 块,或通过 default_server 参数显式指定。这可以防止非法请求被错误处理。

server {
listen 80 default_server;
server_name _;
return 444;
}
此配置中,listen 80 default_server 标记该 server 为默认,server_name _ 匹配所有未指定的域名,return 444 直接关闭连接而不返回响应。这确保未匹配请求被快速拒绝,避免暴露服务器信息。
基于 server_name 冲突时的处理结果是什么
当多个 server 块的 server_name 存在重叠或通配符时,Nginx 按精确匹配优先、前缀匹配次之、通配符最后的规则选择 handler。例如,www.example.com 优先于 *.example.com,而 *.example.com 优先于 _。冲突时以最高优先级匹配为准。











