虚拟主机定义:

虚拟主机指的是在单一机器上运行多个网站 虚拟主机可以是基于IP的,即每个IP一个站点;或者是基于域名的,即每个域名一个站点 这些站点在同一物理服务器上,对用户不会有任何的感知

Nginx也可以配置多种类型的虚拟主机:

1.基于IP的虚拟主机 2.基于端口的虚拟主机 3.基于域名的虚拟主机

下面将分别介绍这些虚拟主机的配置,及优缺点

基于IP的虚拟主机

可以在一块物理网卡上绑定多个IP地址,这是实现基于IP虚拟主机的前提 缺点: 配置复杂,不但要关注Nginx本身的配置,同时也要关注网卡的特殊配置 访问的时候需要使用IP地址:端口(默认80不需要写)去访问,实际上也很复杂

基于端口的虚拟主机

使用端口来区分,浏览器使用域名或IP地址:端口号访问 实例配置:

server {
   listen 8080;
	 server_name www.maiyap.com;
	 root /data/wwwhtml/www.maiyap.com;
}
server{
   listen 9090;
	 server_name www.maiyalog.com;
	 root /data/wwwhtml/www.maiyalog.com;
}

缺点: 虚拟主机使用端口去做区分,导致HTTP协议不标准(标准的HTTP协议为80端口),有可能导致端口冲突,影响Nginx正常运行 业务调用必须要知道业务开启的端口,端口一旦发生改变调用方和被调用方都与要进行调整

基于域名的虚拟主机是最常见的一种虚拟主机

只需要配置DNS服务器,将每个主机名映射到正确的IP地址,然后配置Nginx服务器,令其识别不同的主机名就可以了 这种虚拟技术使用多虚拟主机可以共享同一个IP地址,有效的解决了IP地址不足的问题 实例配置:

server {
   listen 80;
	 server_name www.maiyap.com;
	 root /data/wwwhtml/www.maiyap.com;
}
server{
   listen 80;
	 server_name www.maiyalog.com;
	 root /data/wwwhtml/www.maiyalog.com;
}

优点: 所有虚拟主机使用用一个端口,弥补了基于端口虚拟主机的缺陷 所有虚拟主机使用同一个IP地址,弥补了基于IP虚拟主机的缺陷

默认虚拟主机 默认虚拟主机就是配置文件里的第一个虚拟主机.就是如果解析到这台机器的域名,不管是什么域名,只要配置文件中没有配置,就会访问到默认主机上 在Nginx中若不指定默认虚拟主机,同样配置文件中的第一个虚拟主机将会是默认虚拟主机. 实例配置:

server{
         listen 80 default_server;  #说明是默认虚拟主机
				 server_name _;               #虚拟主机没有域名,为空
				 root   /data/wwwhml/default;
				 access_log /data/wwwhtml/logs/default-access_log main;
         error_log /data/wwwhtml/logs/default-error_log;
			   rewrite ^/(.*) http://maiyap.com/$1 permanent;		  #将所有的未知请求,都导流到maiyap.com服务上
}