虚拟主机
虚拟主机技术是指在一台物理主机服务器上划分出多个磁盘空间,每个磁盘空间都是一台虚拟主机,每台虛拟主机都可以独立对外提供Web服务,且互不干扰。在外界看来,虚拟主机就是一台独立的服务器主机,这就意味着用户能够利用虚拟主机把多个不同域名的网站部署在同一台服务器上,而不必再为建立一个网站单独购买一台服务器,既解决了维护服务器技术的难题,同时又极大地节省了服务器硬件成本和相关的维护费用。
例如,在一台物理主机服务器(10.20. 30. 40)上划分出多台虚拟主机,同时在每台虚拟主机上部署并运行一个网站,当用户请求时,物理主机服务器根据其配置情况,将用户的请求分配到不同的虚拟主机上进行处理,如图:

基于端口号配置虚拟主机
基于端口号配置虚拟主机的方式,是Nginx中配置虚拟主机最简单的方式。它的原理就是一个Nginx监听多个端口,根据不同的端口号,来区分不同的网站。
Nginx的more配置如下:

上述第1行注释,用于告知用户Nginx中虚拟主机的配置可以基于IP地址、域名和端口号进行设置,第2~10行配置是用于在server块中完成虚拟主机的设置。其中,第3行配置表示使用listen命令监听端口,第4行配置表示使用“IP/域名:端口号”的方式监听端口,在实际设置中两者只能选其一。
因此,若要在Nginx中配置一个虚拟主机,只需在http块中添加一个server块即可。换句话说,http块中的每个server块都是一个虚拟主机。
(1)修改nginx.conf配置文件,在http块中添加一下两个server配置:
#配置监听8001端口号的虚拟主机
server {
listen 8001;
server_name localhost;
root html/html8001;
index index.html index.htm;
}
#配置监听8002端口号的虚拟主机
server {
listen 8002;
server_name localhost;
root html/html8002;
index index.html index.htm;
}
(2)编写测试文件
首先,在/usr/local/ nginx/html/下分别创建目录html8001和htm18002。然后,在不同网站根目录下放置一个测试文件用于访问测试。
①在html8001目录中创建index.html测试文件:
<h1>Welcom localhost:8001!</h1>
②在html8001目录中创建index.html测试文件:
<h1>Welcom localhost:8002!</h1>
(3)测试:
访问:localhost:8001

访问:localhost:8002

基于IP配置Nginx虚拟主机
#配置基于IP为192.168.78.3的虚拟主机
server {
listen 80;
server_name 192.168.78.3;
root html/192.168.78.3;
index index.html index.htm;
}
#配置基于IP为192.168.78.4的虚拟主机
server {
listen 80;
server_name 192.168.78.4;
root html/192.168.78.4;
index index.html index.htm;
}
基于域名配置虚拟主机
#配置域名为www.ng.test的虚拟主机
server {
listen 80;
server_name www.ng.test;
root html/www.ng.test;
index index.html index.htm;
}
server_name指令的使用:
server_ name 指令除了上述讲解到的精准配置方式外,还可利用通配符( * )与正则表达式设置域名,实现域名的泛解析。具体使用示例如下。
#以*通配符开始的字符串
server_name *.test.com;
#以*通配符结束的字符串
server_name www.*;
#匹配正则表达式
server_name ~^(?.+)\domain\.com$;
值得一提的是,server_name 指令的几种设置方式,在使用中只要有一项匹配成功,则停止继续匹配其他设置。且匹配的优先级顺序依次为,精准匹配>以通配符开始的字符串>以通配符结束的字符串>正则表达式。
设置目录列表
Nginx默认是不允许列出整个目录的,所以,当用户访问某一站点或目录,且该站点或目录下没有index指令设置的默认索引文件(如index. html等)时,就会报403 Forbidden错误。但是当开启了目录列表功能后,出现上述的情况就可以让该站点或目录下的文件以列表的形式展示。
在Nginx中开启目录列表功能非常简单,只需要配置autoindex指令即可。具体使用方式如下:
autoindex on;
注意:上述指令在不同块中的作用范围也不同,在http块中,表示用于对所有站点都有效;在server块中,表示对指定站点有效;在location块中,表示对某个目录起作用。
将8001html文件夹中的index.html重命名为eee.html,刷新配置,访问: localhost:8001

从图中可以看出,该站点目录下没有指定的默认索引文件index.html,从而显示该站点下的目录列表。除了目录中的文件名称外,还包括各文件最后一次修改的时间(格林尼治时间GMT)和文件的大小(默认是以字节bytes为单位的准确值)。
设置显示文件的时间格式与大小:
在开启目录列表功能时,还可以通过Nginx提供的autoindex_exact_size指令设置精准显示文件大小还是大概显示文件大小;
通过autoindex_ localtime指令设置文件最后一次修改时间的格式。默认情况下,autoindex_ exact_ size 指令和 autoindex _localtime 指令的值分别为on和off。
autoindex_exact_size off;
autoindex_localtime on;
在上述配置中,autoindex_exact_size指令设置为off,表示以kB/MB/GB为单位显示文件的大概大小;autoindex_localtime指令设置为on,表示显示的时间为文件的服务器时间。

子配置文件的引入
由于一个Nginx服务器可运行多个虚拟主机,但如果将所有虚拟主机的配置全部放在nginx. conf文件中,则会造成nginx. conf文件过大、可读性差,对日后的维护带来诸多不便。因此,Nginx中提供了include指令用于组织和管理Nginx相关的配置信息。
include指令的具体语法如下所示:
include file | mask;
test在上述语法中,file用于指定包含的文件名称,mask用于指定某一路径下的文件,其路径可以是相对路径,也可以是绝对路径。其中,在使用相对路径的情况下,相对的路径是Nginx的安装路径下的conf目录/usr/local/ nginx/ conf。
(1)创建目录
在/usr/local/nginx/conf路径下创建vhost目录,用于保存Nginx服务器的虚拟主机配置文件。

(2) 编写虚拟主机配置文件
为了便于管理,推荐使用站点域名为配置文件命名。例如,创建域名为www. ng. test的配置文件。

(3)include引入配置文件
打开Nginx的主配置文件nginx.conf,删除相关的虛拟主机配置,在http块中利用include指令完成www. ng. test. conf文件的引入。具体配置如下:
#第1种方式:单个文件引入
include vhost/www.ng.tets.conf;
#第2种方式:利用通配符
include vhost/*.conf;
(4) 验证:
访问http://ng.test和http://www.ng.test,如果两者结果一直,即成功。
本文深入讲解虚拟主机技术,包括基于端口号、IP和域名的配置方法,以及如何在Nginx中实现虚拟主机的设置。此外,还介绍了如何在Nginx中启用目录列表功能,以及如何使用include指令引入子配置文件。
4718





