在 nginx 中配置虚拟主机域名,核心做法是在 server 块内使用 server_name 指令指定目标域名,并确保该块位于全局 http 上下文中。nginx 通过请求头中的 host 字段匹配 server_name 来确定处理请求的虚拟主机。如果请求的域名不匹配任何已配置的 server_name,nginx 会将请求路由到该端口下默认的第一个 server 块。

如何为多个不同域名配置独立的虚拟主机
要为多个不同域名配置独立的虚拟主机,需要为每个域名创建一个单独的 server 块,并在每个块中分别设置对应的 server_name、root 目录和监听端口。这样 Nginx 就能根据域名将流量分发到不同的网站内容目录。

server {
listen 80;
server_name www.example.com example.com;
root /var/www/example;
index index.html;
}
server {
listen 80;
server_name blog.example.com;
root /var/www/blog;
index index.html;
}
上述配置定义了两个虚拟主机:第一个处理 www.example.com 和 example.com,根目录为 /var/www/example;第二个处理 blog.example.com,根目录为 /var/www/blog。当用户访问 www.example.com 时,Nginx 会返回 /var/www/example 下的文件;访问 blog.example.com 时,则返回 /var/www/blog 下的文件。
如何处理未匹配域名的默认请求
处理未匹配域名的默认请求,只需确保有一个 server 块作为默认服务器,通常是通过省略 server_name 或将其设置为空字符串来实现。Nginx 会将所有无法匹配其他 server_name 的请求转发到这个默认块中。

server {
listen 80 default_server;
server_name _;
root /var/www/default;
index index.html;
return 444;
}
在这个配置中,default_server 参数明确指定该块为默认服务器,server_name _; 是一个通配符,匹配所有未明确指定的域名。可选的 return 444; 直接关闭连接,常用于拒绝非法域名请求。如果没有其他 server_name 匹配请求中的 Host 头,Nginx 就会进入这个块进行处理。
基于程序中某个输入、条件或结果的具体问题
当请求的 Host 头与所有 server_name 都不匹配时,Nginx 会使用默认服务器的配置进行处理。这可能导致意外行为,例如将非预期域名的请求指向错误的网站内容,或者返回错误页面。因此,显式配置默认服务器并处理未匹配请求是重要的安全和管理措施。











