nginx虚拟主机详解
什么是nginx虚拟主机
所谓一个虚拟主机,在Web服务里就是一个独立的网站站点,这个站点对应独立的域名(也可能是IP或端口),具有独立的程序及资源目录,可以独立地对外提供服务供用户访问。虚拟主机是一个网站站点
为什么要用虚拟主机?
- 一个nginx主进程,指定一个配置文件,配置文件里有多个虚拟主机。
- 如果不用虚拟主机,那么,一个diannao.jd.com就要对应一个服务器,浪费。
- 多实例:多个nginx主进程,每个nginx进程,指定不同的配置文件(目录、代码、域名也不同)
虚拟机主机分类
基于【域名】的虚拟主机
以不同的多个域名区分不同的虚拟主机,放在一个nginx服务上,还能够让用户有序访问。
生产用途:企业提供正常网站服务。
请求过程:
- 监听本地所有网卡上对 80端口的请求。
- 读取接收到的 http 报文里的信息。
- 读取 Nginx配置文件虚拟主机 server 标签。
- 先匹配 Server 标签中请求的端口号。
- 相同端口再去匹配 server 标签对应 server_name指定的域名(和请求头里 host字段比对)。
- 把对应域名下面站点目录下的首页文件(index.xx)发给客户端。
- 如果没有匹配的域名,就把默认虚拟主机对应内容发给客户端。
基于【端口】的虚拟主机
以不同的端口,来区分多个虚拟主机,也是放在一个nginx服务上,还能够让用户有序访问。
生产用途:
- 不对外提供访问的服务,网站的后台,测试环境
- 各种应用,API接口(10.0.0.7:8091)
- 所有网站也用特殊端口,前端有负载均衡(80),负载均衡下面的节点是什么端口无所谓。
虚拟主机的基础配置文件
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.jsp index.php index.html index.htm;
}
}
默认虚拟主机判断方法
- 如果include /etc/nginx/conf.d/*.conf; 在nginx.conf里面的server_name前面,那么/etc/nginx/conf.d目录下的第一个虚拟主机就是默认虚拟主机(按顺序)
- 如果include /etc/nginx/conf.d/*.conf; 在nginx.conf里面的server_name后面,那么nginx.conf里面的server_name就是虚拟主机
- 如果某个虚拟主机的listen 80 后面加了default_server ,那么这个虚拟主机就是默认虚拟主机。
如果一个域名进来,匹配不到server_name所设置的域名,那么就会进入到默认的虚拟主机里面。