虚拟主机提供了在同一台服务器上运行多个网站的功能,启动的是一个nginx实例,部署多个虚拟主机来发布多个门户网站。虚拟主机标识是server,一个server对应一个虚拟主机。
(1)基于多域名方式配置虚拟主机
(2)基于多端口配置虚拟主机
(3)基于多ip配置虚拟主机
(1)基于多域名方式配置虚拟主机
基于多域名的虚拟主机是最常见的一种虚拟主机。只需配置你的DNS服务器,将每个主机名映射到正确的IP地址,然后配置Nginx服务器,令其识别不同的主机名就可以了。
网域名称系统(DNS,Domain Name System,将域名和IP地址相互映射的一个分布式数据库)是因特网的一项核心服务,它作为可以将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网,而不用去记住能够被机器直接读取的IP地址数串。
ps:如果没有特殊要求,最好还是使用基于多域名的虚拟主机。
hosts文件:在本机计算机上面,配置本地的ip地址和域名映射关系,通常用于测试。Windows 本地hosts文件,域名在本地的hosts里面做解析,不走公网。
C:\Windows\System32\drivers\etc\hosts
如果所有的虚拟主机都写在http下面会过于庞大很乱,每个server对应一个配置文件这样方便管理(有几个conf文件就有几个server,同理就有几个网站)。通过include函数进行serevr配置文件的引用(在http块内将所有的server删除,使用include进行引用,这样非常简洁明了),这条语句写在http指令块当中。
include /usr/local/nginx/conf/vhost/*.conf;
[root@www ~]# mkdir -p /usr/local/nginx/conf/vhost --vhost下面都是每台虚拟主机的配置
创建三台虚拟主机
[root@www ~]# vim /usr/local/nginx/conf/vhost/www.test.com.conf --配置第一台虚拟主机以.conf结尾
server {
listen 80;
server_name www.test.com;
charset utf-8;
root /data/www/test;
index index.html index.htm;
}
[root@www ~]# vim /usr/local/nginx/conf/vhost/www.test1.com.conf --配置第二台虚拟主机
server {
listen 80;
server_name www.test1.com;
charset utf-8;
root /data/www/test1;
index index.html index.htm;
}
[root@www ~]# vim /usr/local/nginx/conf/vhost/www.tes2.com.conf --配置第三台虚拟主机
server {
listen 80;
server_name www.test2.com;
charset utf-8;
root /data/www/test2;
index index.html index.htm;
}
创建每个server的发布目录,这些站点的路径是不存在的,需要手动创建(mkdir -p /data/www/test1 test2 test3)
[root@www ~]# echo "this is test" > /data/www/test/index.html
[root@www ~]# echo "this is test1" > /data/www/test1/index.html
[root@www ~]# echo "this is test2" > /data/www/test2/index.html
配置本地hosts文件用于域名解析(C:\Windows\System32\drivers\etc)
192.168.179.99 www.test.com www.test1.com www.test2.com
(2)基于多端口配置虚拟主机(可以使用同一个ip,通过访问不同的端口来访问)
[root@www ~]# vim /usr/local/nginx/conf/vhost/www.test1.com.conf --修改之前的配置文件,绑定8080端口
server {
listen 8080;
server_name www.test1.com;
charset utf-8;
root /data/www/test1;
index index.html index.htm;
}
[root@www ~]# netstat -tpln | grep 80 --可以看到虚拟主机test1用的是8080端口,虚拟主机test用的是80端口
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 55384/nginx: master
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 55384/nginx: master
(3)基于多IP的虚拟主机(通过添加多个网卡或者在一块物理网卡上绑定多个IP地址来实现)
[root@www ~]# ip a
ens33:
link/ether 00:0c:29:b4:88:32 brd ff:ff:ff:ff:ff:ff
inet 192.168.179.99/24 brd 192.168.179.255 scope global ens33
valid_lft forever preferred_lft forever
inet 192.168.179.150/24 brd 192.168.179.255 scope global secondary ens33:1
valid_lft forever preferred_lft forever
[root@www ~]# vim /usr/local/nginx/conf/vhost/www.test.com.conf
server {
listen 192.168.179.99:80;
server_name www.test.com;
charset utf-8;
root /data/www/test;
index index.html index.htm;
}
[root@www ~]# vim /usr/local/nginx/conf/vhost/www.test1.com.conf
server {
server_name www.test1.com;
listen 192.168.179.150:80; --绑定IP,因为含有多个IP,所以要监听不同IP的80端口
charset utf-8;
root /data/www/test1;
index index.html index.htm;
}
在/etc/hosts配置
192.168.179.99 www.test.com
192.168.179.150 www.test1.com
[root@www ~]# netstat -tpln
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 192.168.179.150:80 0.0.0.0:* LISTEN 2510/nginx: master
tcp 0 0 192.168.179.99:80 0.0.0.0:* LISTEN 2510/nginx: master
[root@www ~]# echo "this is 192.168.179.150:80" > /data/www/test1/index.html
[root@www ~]# curl www.test1.com
this is 192.168.179.150:80