Nginx的虚拟主机
1、虚拟主机的概念和类型
1.1 概念:
所谓的虚拟主机,在web服务里面就是一个独立的网站站点,这个站点对应独立的域名(也有可能是IP或者端口),具有独立的程序和资源目录,可以独立的对外提供服务。
1.2 类型:
基于域名的虚拟主机:用不同的域名区分不同的虚拟主机(或者对外提供的资源)
基于端口的虚拟主机:用相同的域名不同的端口区分不同的虚拟主机(或者对外提供的资源)
基于IP的虚拟主机:用不同的IP区分不同的虚拟主机(或者对外提供的资源),在生产中很少见的
三种类型可以独立使用,也能混合使用,根据需求来确定使用的形式
2、基于域名的虚拟主机
2.1 修改配置文件:
我们要对nginx的主配置文件进行修改,在修改之前我们要对nginx.conf 文件进行格式化(这样提取出我们想要的文件,便于更好的修改),格式化还是去除空行和注释的行
[root@Nginx /]# cd /opt/nginx/conf/ # 切换到配置文件目录 [root@Nginx conf]# egrep -v "#|^$" nginx.conf.default > nginx.conf # 去掉空行和注释 并生成新的文件nginx.conf
新文件的原始内容
[root@Nginx conf]# cat nginx.conf worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 80; server_name localhost; location / { root html; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }
我们只需要修改server区块的内容即可,修改后的内容如下:(红色标记修改内容)
[root@Nginx conf]# vim nginx.conf worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { # www.brian.com的server区块 listen 80; server_name www.brian.com; # 域名 location / { root html/brian; # 站点根目录 index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }
这里我们也可以通过添加多个server区块来配置基于多域名的虚拟主机,具体修改nginx.conf文件 如下:(红色为修改内容)
worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { # www.brian.com区块开始 listen 80; server_name www.brian.com; # 域名 location / { root html/brian; # 站点根目录 index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } # server区块结束 server { # www.brianzjz.com 区块开始 listen 80; server_name www.brianzjz.com; # 域名 location / { root html/brianzjz; # 站点根目录 index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } #server区块结束 } }
配置文件修改完成,接下来来创建上面指定的站点根目录和首页文件
2.2 创建对应站点的目录和文件:
创建站点根目录,根据上面的nginx.conf中指定的:
[root@Nginx conf]# mkdir -p ../html/brian [root@Nginx conf]# mkdir -p ../html/brianzjz
创建index.html的首页文件
[root@Nginx nginx]# echo "http://www.brian.com" > html/brian/index.html [root@Nginx nginx]# echo "http://www.brianzjz.com" > html/brianzjz/index.html [root@Nginx nginx]# cat html/brian/index.html http://www.brian.com [root@Nginx nginx]# cat html//brianzjz/index.html http://www.brianzjz.com
这样我们配置文件和首页就已经配置完成了,下面就是重启nginx 并且进行测试了
2.3 重启nginx,测试:
在重启nginx服务之前,我们要先对语法进行检测:
[root@Nginx nginx]# sbin/nginx -t # 语法检测,出现ok字样,没有问题 nginx: the configuration file /opt/nginx-1.6.3//conf/nginx.conf syntax is ok nginx: configuration file /opt/nginx-1.6.3//conf/nginx.conf test is successful
平滑重启nginx服务(reload方法,不中断业务)
[root@Nginx nginx]# sbin/nginx -s reload
检查nginx的重新加载情况
[root@Nginx nginx]# netstat -lntup | grep 80 tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 23305/nginx: master [root@Nginx nginx]# ps -ef | grep nginx root 23305 1 0 06:48 ? 00:00:00 nginx: master process /opt/nginx/sbin/nginx nginx 24379 23305 0 10:44 ? 00:00:00 nginx: worker process root 24383 23911 0 10:44 pts/2 00:00:00 grep --color=auto nginx [root@Nginx nginx]# lsof -i :80 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME nginx 23305 root 6u IPv4 47849 0t0 TCP *:http (LISTEN) nginx 24379 nginx 6u IPv4 47849 0t0 TCP *:http (LISTEN)
测试(因为没有dns的域名解析服务,我们只能通过添加hosts的文件来模拟解析):
Linux添加hosts文件: [root@Nginx nginx]# echo "192.168.1.108 www.brian.com www.brianzjz.com" >> /etc/hosts [root@Nginx nginx]# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.1.108 www.brian.com www.brianzjz.com windows添加hosts文件 路径:C:\Windows\System32\drivers\etc\hosts 打开上面路径的文件添加,下面内容 保存 192.168.1.108 www.brian.com www.brianzjz.com
Linux上面访问测试:
[root@Nginx conf]# curl www.brian.com www.brian.com # www.brian.com 主页面内容 [root@Nginx conf]# curl www.brianzjz.com www.brianzjz.com # www.brianzjz.com 主页面内容 [root@Nginx conf]#
windows浏览器测试:
3、基于端口的虚拟主机(基于上面的配置文件进行修改)
3.1 修改配置文件:
修改nginx.conf配置文件如下:(红色标记修改位置)
worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 10000; # 将80端口修改成10000 server_name www.brian.com; location / { root html/brian; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } server { listen 11000; # 将80端口修改成11000 server_name www.brianzjz.com; location / { root html/brianzjz; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }
3.2 重启nginx,测试:
在重启nginx服务之前,我们要先对语法进行检测:
[root@Nginx nginx]# sbin/nginx -t # 语法检测,出现ok字样,没有问题 nginx: the configuration file /opt/nginx-1.6.3//conf/nginx.conf syntax is ok nginx: configuration file /opt/nginx-1.6.3//conf/nginx.conf test is successful
平滑重启nginx服务(reload方法,不中断业务)
[root@Nginx nginx]# sbin/nginx -s reload
检查nginx的重新加载情况
[root@Nginx nginx]# netstat -lntup | grep 80 tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 23305/nginx: master [root@Nginx nginx]# ps -ef | grep nginx root 23305 1 0 06:48 ? 00:00:00 nginx: master process /opt/nginx/sbin/nginx nginx 24379 23305 0 10:44 ? 00:00:00 nginx: worker process root 24383 23911 0 10:44 pts/2 00:00:00 grep --color=auto nginx [root@Nginx nginx]# lsof -i :80 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME nginx 23305 root 6u IPv4 47849 0t0 TCP *:http (LISTEN) nginx 24379 nginx 6u IPv4 47849 0t0 TCP *:http (LISTEN)
windows浏览器测试:
4、基于IP的虚拟主机(基于域名的虚拟主机进行配置文件修改)
4.1 增加服务器IP:
既然要配置基于IP的虚拟主机,就需要让每个虚拟主机的IP不同,这时我们就要加入辅助的虚拟IP了,命令如下:
[root@Nginx nginx]# ip addr add 192.168.1.111/24 dev ens33
增加完毕后,检查配置生效结果:
[root@Nginx nginx]# ip add | grep 192.168.1 # 过滤ens33 网卡上的IP inet 192.168.1.108/24 brd 192.168.1.255 scope global dynamic ens33 inet 192.168.1.111/24 scope global secondary ens33 [root@Nginx nginx]# ping 192.168.1.108 # ping检查 PING 192.168.1.108 (192.168.1.108) 56(84) bytes of data. 64 bytes from 192.168.1.108: icmp_seq=1 ttl=64 time=0.387 ms [root@Nginx nginx]# ping 192.168.1.111 # ping 检查 PING 192.168.1.111 (192.168.1.111) 56(84) bytes of data. 64 bytes from 192.168.1.111: icmp_seq=1 ttl=64 time=0.050 ms
4.2 修改配置文件:(红色标记为修改项)
worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 192.168.1.108:80; server_name www.brian.com; location / { root html/brian; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } server { listen 192.168.1.111:80; server_name www.brianzjz.com; location / { root html/brianzjz; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }
4.3 重启nginx,测试:
在重启nginx服务之前,我们要先对语法进行检测:
[root@Nginx nginx]# sbin/nginx -t # 语法检测,出现ok字样,没有问题 nginx: the configuration file /opt/nginx-1.6.3//conf/nginx.conf syntax is ok nginx: configuration file /opt/nginx-1.6.3//conf/nginx.conf test is successful
平滑重启nginx服务(reload方法,不中断业务)
[root@Nginx nginx]# sbin/nginx -s reload
检查nginx的重新加载情况
[root@Nginx nginx]# netstat -lntup | grep 80 tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 23305/nginx: master [root@Nginx nginx]# ps -ef | grep nginx root 23305 1 0 06:48 ? 00:00:00 nginx: master process /opt/nginx/sbin/nginx nginx 24379 23305 0 10:44 ? 00:00:00 nginx: worker process root 24383 23911 0 10:44 pts/2 00:00:00 grep --color=auto nginx [root@Nginx nginx]# lsof -i :80 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME nginx 23305 root 6u IPv4 47849 0t0 TCP *:http (LISTEN) nginx 24379 nginx 6u IPv4 47849 0t0 TCP *:http (LISTEN)
windows浏览器测试:
5、总结虚拟主机的配置步骤
- 增加一个完整的server标签段到结尾处
- 更改server_name及对应网页的root根目录(站点根目录)
- 创建server_name域名对应的网页根目录,并建立index.html文件
- 检查nginx配置文件语法,平滑重启nginx,快速检查启动结果
- 配置hosts文件或者DNS域名解析
- 测试访问结果