Nginx: 基于多网卡,端口,域名的虚拟主机实现

虚拟主机的分类

  • 虚拟主机其实也就是利用我们的单台服务器去构筑出多个不同类型的网站
  • 虚拟主机有很多种的分类,基本上可以总体分为三类
  • 第一种是基于多IP的虚拟主机
  • 第二种是基于多端口的虚拟主机
  • 第三种是基于域名的虚拟主机

1 ) 基于 多IP 的虚拟主机

  • 如果想要构建一个基于多IP的虚拟服务器,其实也就是在我们单台服务器上通常会有多块网卡
  • 然后在每一块网卡上配置对应的IP地址,然后每一个IP地址都可以给它布置上虚拟主机
  • 这个虚拟主机其实就是对应不同的一些站点,比如说,个人有三个不同类型的网站
  • 但是,这个网站的访问流量都很小,没有必要去为其单独的使用一台服务器来进行部署
  • 可以基于这种多IP的虚拟主机进行部署, 通常, 个人站点, 基本上很多情况下都只是为个人使用
  • 所以直接配置IP形式的话,自己知道就行了,不需要每一个公网的域名去映射
  • 这种是基于多IP的虚拟主机

2 ) 基于 多端口 的虚拟主机

  • 在单台服务器上进行部署,但是,通常网卡只有一块
  • 可以基于不同的端口来提供不同的服务
  • 比如,同一个IP地址的80端口可以提供一个网站
  • 81 也可以提供一个网站服务,82也可以提供一个网站服务
  • 这种,就是基于多端口的一个虚拟主机的实现形式
  • 上面这两种通常都是用于个人演示,个人站点,内部使用的时候,构建的一个虚拟主机形式
  • 在实际的生产环境中(对外提供服务) 的形式是不常用的

3 ) 基于 域名 的虚拟主机

  • 虚拟主机的的实现形式用起来就是比较多
  • 这种形式通常就是说可以在一台物理主机上使用不同的域名来区分不同的网站服务
  • 基于域名的虚拟主机部署的服务都是不同的

基于多网卡的虚拟主机实现

1 ) 网卡和IP配置

  • 也是多IP的虚拟主机,这里可以使用虚拟机来模拟,增加几台虚拟网卡

  • 之后对网卡文件进行编辑处理,默认只有一个网卡文件

  • $ ifconfig 假如,有如下的显示

    conf 复制代码
    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 核心配置

conf 复制代码
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,下面是核心配置

conf 复制代码
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 来模拟
conf 复制代码
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

    conf 复制代码
    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
  • 检查,重载配置,并访问

相关推荐
主机哥哥1 分钟前
阿里云OpenClaw部署全攻略,五种方案助你快速部署!
服务器·阿里云·负载均衡
Harvey9032 分钟前
通过 Helm 部署 Nginx 应用的完整标准化步骤
linux·运维·nginx·k8s
ManThink Technology26 分钟前
如何使用EBHelper 简化EdgeBus的代码编写?
java·前端·网络
珠海西格电力科技1 小时前
微电网能量平衡理论的实现条件在不同场景下有哪些差异?
运维·服务器·网络·人工智能·云计算·智慧城市
QT.qtqtqtqtqt1 小时前
未授权访问漏洞
网络·安全·web安全
释怀不想释怀1 小时前
Linux环境变量
linux·运维·服务器
zzzsde1 小时前
【Linux】进程(4):进程优先级&&调度队列
linux·运维·服务器
半壶清水2 小时前
[软考网规考点笔记]-软件开发、项目管理与知识产权核心知识与真题解析
网络·笔记·压力测试
JMchen1232 小时前
Android后台服务与网络保活:WorkManager的实战应用
android·java·网络·kotlin·php·android-studio
yuanmenghao2 小时前
Linux 性能实战 | 第 7 篇 CPU 核心负载与调度器概念
linux·网络·性能优化·unix