测试环境:
操作系统:CentOS release 6.10 (Final)
虚拟机工具:VMWare Workstation
Web服务器软件: nginx/1.14.2
主机IP:192.168.12.128
虚拟两个IP:192.168.12.131 192.168.12.132
一、什么是虚拟主机?
虚拟主机技术是指在一台物理主机服务器上划分出多个磁盘空间,每个磁盘空间都是一台虚拟主机,每台虚拟主机都可以对外提供Web服务,且互不干扰。用户能够利用虚拟主机把多个不同域名的网站部署在同一台服务器上,一台服务器上可以划分多台虚拟主机,同时每台虚拟主机上都可以部署并运行网站,而不必再为建立一个网站单独购买一台服务器,既解决了维护服务器技术的难题,同时又极大地节省了服务器硬件成本和相关的维护费用。
二、基于端口号配置虚拟主机
一个Nginx监听多个端口,根据不同的端口号,来区分不同的网站。
在http块中添加serve块即可,配置如下:
server {
listen 8001;
server_name 192.168.12.128;
root html/html8001;
index index.html index.htm;
}
server {
listen 8002;
server_name 192.68.12.128;
root html/html8002;
index index.html index.htm;
}
......
测试效果如下:
三、基于IP配置Nginx虚拟主机:
1.设置IP别名
1).修改网络配置文件
[root@Nginx network-scripts]# cp ifcfg-eth0 ifcfg-eth0:1
[root@Nginx network-scripts]# cp ifcfg-eth0 ifcfg-eth0:2
[root@Nginx network-scripts]# vi ifcfg-eth0:1
DEVICE=eth0:1
HWADDR=00:0C:29:13:04:9C
ONBOOT=yes
BOOTPROTO=static
TYPE=Ethernet
IPADDR=192.168.12.131
NETMASK=255.255.255.0
GATEWAY=192.168.12.2
#DNS=220.248.192.12
DNS=202.101.224.68
[root@Nginx network-scripts]# vi ifcfg-eth0:2
DEVICE=eth0:2
HWADDR=00:0C:29:13:04:9C
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
TYPE=Ethernet
IPADDR=192.168.12.132
[root@Nginx network-scripts]# service network restart
正在关闭接口 eth0: [确定]
关闭环回接口: [确定]
弹出环回接口: [确定]
弹出界面 eth0: Determining if ip address 192.168.12.128 is already in use for device eth0...
Determining if ip address 192.168.12.131 is already in use for device eth0...
Determining if ip address 192.168.12.132 is already in use for device eth0... [确定]
弹出界面 eth0.back: RTNETLINK answers: File exists [确定]
2)ifconfig和route命令配置IP别名的设置
[root@Nginx network-scripts]# ifconfig eth0:1 192.168.12.131 broadcast 192.168.12.2 netmask 255.255.255.0 up
[root@Nginx network-scripts]# route add -host 192.168.12.131 dev eth0:1
[root@Nginx network-scripts]# ifconfig eth0:2 192.168.12.132 broadcast 192.168.12.2 netmask 255.255.255.0 up
[root@Nginx network-scripts]# route add -host 192.168.12.132 dev eth0:2
通过ifconfig和route配置的IP别名在系统网络服务重启后就会消失。
为了解决上述问题,可以将ifconfig和route命令添加到/etc/rc.local文件中,使系统开机时就会自动运行相关操作
[root@Nginx network-scripts]# vi /etc/rc.local #在文件末尾添加下列几条命令
ifconfig eth0:1 192.168.12.131 broadcast 192.168.12.2 netmask 255.255.255.0 up
route add -host 192.168.12.131 dev eth0:1
ifconfig eth0:2 192.168.12.132 broadcast 192.168.12.2 netmask 255.255.255.0 up
route add -host 192.168.12.132 dev eth0:2
2.配置基于IP的虚拟主机实例
[root@Nginx html]# mkdir 192.168.12.131 #在该目录下创建index.html测试文件
[root@Nginx html]# mkdir 192.168.12.132 #在该目录下创建index.html测试文件
修改nginx.conf配置文件,在http块中添加以下两个server配置,具体如下:
server {
listen 80;
server_name 192.168.12.131;
root html/192.168.12.131;
index index.html index.htm;
}
server {
listen 80;
server_name 192.168.12.132;
root html/192.168.12.132;
index index.html index.htm;
}
测试效果如下:
四.基于域名配置虚拟主机:
在真实的上线环境中,一个网站需要域名和公网IP地址才可以访问。本实例是在VMWare Workstation测试通过,利用系统提供的hosts文件来设置一个虚拟的域名,并将域名解析到指定IP地址。
1)修改hosts文件,实现网站域名访问
#vi /etc/hosts
127.0.0.1 www.ng.test
127.0.0.1 ng.test
2)配置nginx文件,在http块中添加如下配置
server {
listen 80;
server_name ng.test www.ng.test;
root html/www.ng.test;
index index.html index.htm;
}
3)在../html下创建目录www.ng.test,然后创建index.html
[root@Nginx ~]# curl www.ng.test
Welcome www.ng.test!
[root@Nginx ~]# curl ng.test
Welcome www.ng.test!
五、设置Nginx html目录列表
location / {
root html;
# index index.html index.htm;
index index.php;
autoindex on; #开启目录列表功能
autoindex_exact_size off; #以KB/MB/GB为单位显示文件的大小
autoindex_localtime on; #显示的时间为文件的服务器时间
}
参数说明:
autoindex_localtime on 表示显示的时间为文件的服务器时间,off指文件最后一次修改的时间
autoindex_exact_size on 表示大概显示文件大小,off是精准显示文件大小
测试如下图所示:
六、子配置文件的引入
由于一个Nginx服务器可运行多个虚拟主机,但如果将所有虚拟主机的配置全部放在nginx.conf文件中,则会造成nginx.cof文件过大、可读性差,对日后的维护带来诸多不便。因此,可以用include指令用于组织和管理Nginx相关的配置信息。
1)先注释掉nginx.conf文件中的两个server块
# server {
# listen 80;
# server_name 192.168.12.132;
# root html/192.168.12.132;
# index index.html index.htm;
# }
# server {
# listen 80;
# server_name ng.test www.ng.test;
# root html/www.ng.test;
# index index.html index.htm;
# }
2)创建vhost目录,编写虚拟主机配置文件
[root@Nginx conf]# mkdir vhost
[root@Nginx conf]# pwd
/usr/local/nginx/conf
[root@Nginx conf]# cd vhost
[root@Nginx vhost]# touch www.ng.test.conf
[root@Nginx vhost]# vi www.ng.test.conf
server {
listen 80;
server_name ng.test www.ng.test;
root html/www.ng.test;
index index.html index.htm;
}
[root@Nginx vhost]# touch 192.168.12.132
[root@Nginx vhost]# vim 192.168.12.132
server {
listen 80;
server_name 192.168.12.132;
root html/192.168.12.132;
index index.html index.htm;
}
3)include引入配置文件
[root@Nginx conf]# vi nginx.conf
include vhost/192.168.12.132;
include vhost/www.ng.test.conf;
4)验证测试