虚拟主机的分类
- 虚拟主机其实也就是利用我们的单台服务器去构筑出多个不同类型的网站
- 虚拟主机有很多种的分类,基本上可以总体分为三类
- 第一种是基于多IP的虚拟主机
- 第二种是基于多端口的虚拟主机
- 第三种是基于域名的虚拟主机
1 ) 基于 多IP 的虚拟主机
- 如果想要构建一个基于多IP的虚拟服务器,其实也就是在我们单台服务器上通常会有多块网卡
- 然后在每一块网卡上配置对应的IP地址,然后每一个IP地址都可以给它布置上虚拟主机
- 这个虚拟主机其实就是对应不同的一些站点,比如说,个人有三个不同类型的网站
- 但是,这个网站的访问流量都很小,没有必要去为其单独的使用一台服务器来进行部署
- 可以基于这种多IP的虚拟主机进行部署, 通常, 个人站点, 基本上很多情况下都只是为个人使用
- 所以直接配置IP形式的话,自己知道就行了,不需要每一个公网的域名去映射
- 这种是基于多IP的虚拟主机
2 ) 基于 多端口 的虚拟主机
- 在单台服务器上进行部署,但是,通常网卡只有一块
- 可以基于不同的端口来提供不同的服务
- 比如,同一个IP地址的80端口可以提供一个网站
- 81 也可以提供一个网站服务,82也可以提供一个网站服务
- 这种,就是基于多端口的一个虚拟主机的实现形式
- 上面这两种通常都是用于个人演示,个人站点,内部使用的时候,构建的一个虚拟主机形式
- 在实际的生产环境中(对外提供服务) 的形式是不常用的
3 ) 基于 域名 的虚拟主机
- 虚拟主机的的实现形式用起来就是比较多
- 这种形式通常就是说可以在一台物理主机上使用不同的域名来区分不同的网站服务
- 基于域名的虚拟主机部署的服务都是不同的
基于多网卡的虚拟主机实现
1 ) 网卡和IP配置
- 也是多IP的虚拟主机,这里可以使用虚拟机来模拟,增加几台虚拟网卡
- 之后对网卡文件进行编辑处理,默认只有一个网卡文件
- $
ifconfig
假如,有如下的显示ens33: .... 这里对应有一个ip地址, 假如是 192.168.184.240 ens37: ... 这里对应有一个ip地址 ens 38: ... 这里对应有一个ip地址
- $
cd /etc/sysconfig/network-scripts/ && ls
- 下面比如有这个文件:ifcfg-ens33
- 复制两份,$
cp ifcfg-ens33 ifcfg-ens37
这个37要保持和 ip a 中的显示一致,这里举例 - $
cp ifcfg-ens33 ifcfg-ens38
同上
- 对 ifcfg-ens37 进行编辑
- 移除 UUID 因为这个不能和之前重复
- 修改 NAME=ens37
- 修改 DEVICE=ens37
- IPADDR=192.168.184.242
- 同样,对 ifcfg-ens38 进行编辑
- 同上,修改成 ens38 ,并且IP最后改成 244
- 重启网络 $
systemctl restart network
- 使用 $
ifconfig
来重新验证,三块网卡都改成了想要的样子 - 如果在真实的环境,比如云服务器,购买了公网IP,可以直接在上面配置即可
2 )Nginx 核心配置
user nginx;
worker_processes auto;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 192.168.184.240; # 这里监听第一块网卡,默认 80 端口,可省略
server_name localhost;
location / {
root html/server1; # 这里的 root 相对于编译时的参数 --prefix=/opt/nginx, 全路径为:/opt/nginx/html/server1
index index.html index.htm; # 在上述目录下寻找这两个文件
}
}
server {
listen 192.168.184.242; # 这是第二台
server_name localhost;
location / {
root html/server2;
index index.html index.htm;
}
}
server {
listen 192.168.184.244; # 这是第三台
server_name localhost;
location / {
root html/server3;
index index.html index.htm;
}
}
}
-
准备好相关文件
- html/server1/index.html 这里显示 server1
- html/server2/index.html 这里显示 server2
- html/server3/index.html 这里显示 server3
-
检查配置文件 $
/opt/nginx/sbin/nginx -t
-
重载配置文件 $
/opt/nginx/sbin/nginx -s reload
-
访问
- 192.168.184.240 显示 server1
- 192.168.184.242 显示 server2
- 192.168.184.244 显示 server3
基于端口的虚拟主机实现
这里直接配置 nginx,下面是核心配置
http {
server {
listen 8080;
server_name localhost;
location / {
root html/p-server1;
index index.html;
}
}
server {
listen 8081;
server_name localhost;
location / {
root html/p-server2;
index index.html;
}
}
}
- 准备好相关文件
- html/p-server1/index.html 这里显示 p-server1
- html/p-server2/index.html 这里显示 p-server2
- html/p-server1/manager/admin.html 这里显示 admin
- 检查和reload之后,进行访问
- 192.168.184.240:8080 显示 p-server1
- 192.168.184.240:8081 显示 p-server2
- 访问:192.168.184.240:8080/manager/admin.html
- 这里会显示 admin
- 如果是中文页面可能有乱码,在相关块中设置
charset utf-8;
- 参考文档:ngx_http_charset_module
- 如果当前主机上有多网卡,也可以这样访问,这里借用上述多网卡环境
- 192.168.184.242:8080 显示 p-server1
- 192.168.184.242:8081 显示 p-server2
- 或
- 192.168.184.244:8080 显示 p-server1
- 192.168.184.244:8081 显示 p-server2
基于域名的虚拟主机实现
- 域名可以从运营商处购买,之后可以在公网使用,如果先不买,本机配置 hosts 来模拟
http {
server {
listen 80;
server_name www.abc.com;
location / {
root html/domai_vm1;
index login.html
}
}
server {
listen 80;
server_name www.abc.cn;
location / {
root html/domai_vm2;
index admin.html
}
}
}
-
准备好 host: $
vim /etc/hosts
192.168.184.240 www.abc.com 192.168.184.240 www.abc.cn
-
准备好相关文件
- domain_vm1/login.html 显示 abc.com
- domain_vm2/admin.html 显示 abc.cn
-
检查,重载配置,并访问
- www.abc.com 显示 abc.com
- www.abc.cn 显示 abc.cn