nginx虚拟主机详解

什么是nginx虚拟主机

所谓一个虚拟主机,在Web服务里就是一个独立的网站站点,这个站点对应独立的域名(也可能是IP或端口),具有独立的程序及资源目录,可以独立地对外提供服务供用户访问。虚拟主机是一个网站站点

为什么要用虚拟主机?

  1. 一个nginx主进程,指定一个配置文件,配置文件里有多个虚拟主机。
  2. 如果不用虚拟主机,那么,一个diannao.jd.com就要对应一个服务器,浪费。
  3. 多实例:多个nginx主进程,每个nginx进程,指定不同的配置文件(目录、代码、域名也不同)

虚拟机主机分类

基于【域名】的虚拟主机

以不同的多个域名区分不同的虚拟主机,放在一个nginx服务上,还能够让用户有序访问。

生产用途:企业提供正常网站服务。

请求过程:

  1. 监听本地所有网卡上对 80端口的请求。
  2. 读取接收到的 http 报文里的信息。
  3. 读取 Nginx配置文件虚拟主机 server 标签。
  4. 先匹配 Server 标签中请求的端口号。
  5. 相同端口再去匹配 server 标签对应 server_name指定的域名(和请求头里 host字段比对)。
  6. 把对应域名下面站点目录下的首页文件(index.xx)发给客户端。
  7. 如果没有匹配的域名,就把默认虚拟主机对应内容发给客户端。

基于【端口】的虚拟主机

以不同的端口,来区分多个虚拟主机,也是放在一个nginx服务上,还能够让用户有序访问。

生产用途:

  1. 不对外提供访问的服务,网站的后台,测试环境
  2. 各种应用,API接口(10.0.0.7:8091)
  3. 所有网站也用特殊端口,前端有负载均衡(80),负载均衡下面的节点是什么端口无所谓。

虚拟主机的基础配置文件

server {                                                          
    listen       80;                                         
    server_name  localhost;                                      

    location / {                                                
        root   /usr/share/nginx/html;            
        index  index.jsp index.php index.html index.htm;        
    }                                                
}

默认虚拟主机判断方法

  1. 如果include /etc/nginx/conf.d/*.conf; 在nginx.conf里面的server_name前面,那么/etc/nginx/conf.d目录下的第一个虚拟主机就是默认虚拟主机(按顺序)
  2. 如果include /etc/nginx/conf.d/*.conf; 在nginx.conf里面的server_name后面,那么nginx.conf里面的server_name就是虚拟主机
  3. 如果某个虚拟主机的listen 80 后面加了default_server ,那么这个虚拟主机就是默认虚拟主机。

如果一个域名进来,匹配不到server_name所设置的域名,那么就会进入到默认的虚拟主机里面。

posted @ 2025-08-14 16:01  阿峰博客站  阅读(20)  评论(0)    收藏  举报