前面讲了如何安装和配置Nginx,今天要说的是Nginx如何配置虚拟主机。
需要说明的是:由于本文章是nginx系列文章中的一篇,文章里面很多其他的配置,可能前面的文章已经说讲过,然后后续就没有在介绍,如果出现有些配置没有讲,大家可能需要去看看前面的文章。
一. 什么是虚拟主机
虚拟主机是一种特殊的软硬件技术,它可以将网络上的每一台计算机分成多个虚拟主机,每个虚拟主机可以独立对外提供www服务,这样就可以实现一台主机对外提供多个web服务,每个虚拟主机之间是独立的,互不影响的。
如下图:
通过nginx可以实现虚拟主机的配置,nginx支持三种类型的虚拟主机配置:
1、基于ip的虚拟主机
2、基于域名的虚拟主机
3、基于端口的虚拟主机
实际使用的过程中,我们一般常用的是用域名或是端口来区分web服务。只不过我这里为了讲的全面一点,会把三种配置都讲一讲。
二. Nginx配置文件的结构
要真正学会Nginx,就必须熟悉Nginx配置文件的结构。下面先介绍Nginx的配置文件结构。主要结构如下:
...... events { ....... } http{ ....... server{ ....... } server{ ....... } }
上面的示例中,每个server就是一个虚拟主机。就代表着一个路由转发的地址。
三. 基于ip的虚拟主机配置
Linux操作系统允许添加IP别名,就是在一块物理网卡上绑定多个lP地址。这样就能够在使用单一网卡的同一个服务器上运行多个基于IP的虚拟主机。
应用场景
一台nginx服务器绑定两个ip:192.168.78.132、192.168.78.133,访问不同的ip请求不同的html目录,即:
访问http://192.168.78.132将访问html132目录下的html网页
访问http://192.168.78.133将访问html133目录下的html网页
i. 准备环境
首先,创建192.168.78.132 的虚拟机;然后,保证本地电脑和虚拟网络通畅。
在虚拟服务器192.168.78.132上安装Nginx。这个之前讲过Nginx 的源码安装,大家可以去看看之前的文章,这里就不重复了。
ii. 绑定多ip
1、修改网络配置文件,进入到/etc/sysconfig/network-scripts
,编辑ifcfg-ens33
文件如下:
TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no # BOOTPROTO=dhcp 注意区别!!! DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=ens33 UUID=26c2f3f8-62c5-4571-80e2-ca394cfd43da DEVICE=ens33 ONBOOT=yes ZONE=public # 注意区别 IPADDR0=192.168.78.132 PREFIX0=24 IPADDR1=192.168.78.133 PREFIX1=16
这里使用一个虚拟主机,2个IP来模拟两个虚拟主机的情况。IP地址分别为192.168.78.132和192.168.78.133
2、保存修改,重启网络,使用如下: systemctl restart network
[root@bogon network-scripts]# systemctl restart network
这个是linux的基本命令,大家参照网上的资料,不明白的可以去这里看看具体如何操作。
iii. 创建两个web网站
进入/usr/local/nginx 目录,将原来nginx的html目录拷贝两个目录 “html132”和“html133”,为了方便测试需要修改每个目录下的index.html内容使之个性化。
cd /usr/local/nginx cp -r html html132 cp -r html html133
这里创建了两个网站目录,分别为:html132、和html133。
iv. 配置虚拟主机
修改/usr/local/nginx/conf/nginx.conf文件,添加两个虚拟主机,如下:
#user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; #配置虚拟主机192.168.78.132 server { #监听的ip和端口,配置192.168.78.132:80 listen 80; #虚拟主机名称这里配置ip地址 server_name 192.168.78.132; #所有的请求都以/开始,所有的请求都可以匹配此location location / { #使用root指令指定虚拟主机目录即网页存放目录 #比如访问http://ip/test.html将找到/usr/local/html3/test.html #比如访问http://ip/item/test.html将找到/usr/local/html3/item/test.html root /usr/local/nginx/html132; #指定欢迎页面,按从左到右顺序查找 index index.html index.htm; } } #配置虚拟主机192.168.78.133 server { listen 80; server_name 192.168.78.133; location / { root /usr/local/nginx/html133; index index.html index.htm; } } }
上面我们在Nginx配置文件中,创建了2个虚拟主机,分别指向html132和html133网站。
四. 验证测试
重新启动nginx,然后分别访问两个Nginx虚拟主机。
以上,我们可以看到通过IP地址,我们成功访问到了我们对应的网站。说明基于IP的虚拟主机配置成功。
最后
以上,就把nginx 基于ip的配置虚拟主机讲完了。后面会继续讲基于域名和端口的配置。
这是系列课程,大家关注我的微信公众号(架构师精进),随时交流。
推荐阅读:
Nginx极简入门(一)如何在Linux系统编译安装Nginx服务
SpringBoot从入门到精通(二十八) JPA 的实体映射关系,轻松一对一,一对多,多对多关系映射!
SpringBoot从入门到精通(二十七)使用Spring Data JPA 自定义查询如此简单,完全不需要写SQL!