⼀、背景
阿⾥云有⼀批服务器⼜要续费了,申请经费时⽼板问能不能省着点,好吧现在经济不景⽓,⼤家都不容易,那就并掉⼀些访问量很⼩静态⽹站应⽤,释放⼏台机器,⼀年也能省掉万把块钱呢,具体怎么做呢,请看下⽂。
⼆、虚拟主机概念
虚拟主机也称⽹站空间,指把⼀台硬件服务器划分多个虚拟空间,在⼀台机器上⼀个Nginx服务可以运⾏多个⽹站应⽤,更上⼀层的就是虚拟机的概念了,虚拟机和虚拟主机是两个概念,虚拟机是在⼀台硬件主机上划分多个独⽴的操作系统,虚拟主机是划分多个⽹站服务。
三、虚拟主机配置⼏种⽅式
⾸先装好⼀个⼲净的Nginx⽤来做实验。
# centos下nginx安装 yum install nginx
# 启动 systemctl start nginx
# 确认启动是否成功 netstat -anp | grep :80
启动成功后会在80端⼝上进⾏监听 0 0.0.0.0:80,所有服务安装后, 都要关注⼀下这个输出,是否允开放远程访问,0 0.0.0.0表示允许所主机,127.0.0.1表示只允许本机访问,那就得去修改配置⽂件。
云服务平台的访问规则与Iptables\firewalld区别,在我的理解中云服务平台的访问规则应该是配置在路由器交换机中可以针对⼀组机器进⾏配置,相当于第⼀个⻔,⽽iptables是单机⽹卡上做防⽕墙相当于第⼆个⻔,你要访问该主机服务,必须通过两道⻔。
1、基于IP配置虚拟主机
因为机器上没有两块⽹卡两个IP,那我们就配置IP别名通过内⽹访问来测试
内⽹IP:172.16.79.224
IP别名:172.16.79.220
IP别名配置
ifconfig eth0:1 172.16.79.220 broadcast 172.16.79.255
netmask 255.255.240.0 up
route add -host 172.16.79.220 dev eth0:1
nginx.conf
server{
listen 80;
server_name 172.16.79.224;
#主⻚内容 172.16.79.224
root /var/www/html/224;
}
server{
listen 80;
#主⻚内容 172.16.79.220
server_name 172.16.79.220;
root /var/www/html/220;
}
测试是否配置成功
systemctl restart nginx
wget 172.16.79.224 返回内容224
wget 172.16.79.220 返回内容220
2、基于域名配置虚拟主机
server{
listen 80;
server_name qingcai1.vanmilk.com;
root /var/www/html/qingcai1;
}
server{
listen 80;
server_name qingcai2.vanmilk.com qingcai3.vanmilk.com;
root /var/www/html/qingcai2;
}
本地机器配置hosts
118.178.255.158 qingcai1.vanmilk.com qingcai2.vanmilk.com qingcai3.vanmilk.com
浏览器访问 http://qingcai1.vanmilk.com/ 返回qingcai1下内容,访问 http://qingcai2.vanmilk.com/ http://qingcai3.vanmilk.com/ 返回qingcai2下内容。
3、基于端⼝配置虚拟主机
server {
listen 8001;
server_name 118.178.255.158;
location / {
proxy_pass http://127.0.0.1:8001;
}
}
server {
listen 8002;
server_name 118.178.255.158;
location / {
proxy_pass http://127.0.0.1:8002;
}
}
配置后重启nginx报错,查⽇志发现
2021/08/05 06:48:20 [emerg] 30233#30233: bind() to 0.0.0.0:8081 failed (13: Permission denied)
⽤netstat 查端⼝并没有被占⽤,是因为启⽤了SELinux,先直接关闭SELinux setenforce 0。
浏览器访问
http://118.178.255.158:8081/
# 返回8081内容
http://118.178.255.158:8082/
# 返回8082内容
四、实际案例
将公司⼀个访问量很⼩的静态⽹站和⼀个后端管理应⽤服务部署在同⼀台机器
混合了IP与DNS配置。
# 静态⽹站
server{
listen 80;
server_name www.qingcai18036.com.au;
location / {
root /home/ec2-user/www/html;
}
}
server {
listen 80;
server_name 54.79.211.*;
# 后端接⼝应⽤转发,解决前后端分离跨域
location ^~/api/ {
proxy_pass http://54.79.211.*:8098/;
}
# 应⽤前端
location / {
root /home/ec2-user/adm/;
}
}