当前位置: 首页 > news >正文

高性能 WEB 服务器 Nginx:多虚拟主机实现!

Nginx 配置多虚拟主机实现

多虚拟主机是指在一台 Nginx 服务器上配置多个网站

在 Nginx 中,多虚拟主机有三种实现方式:

  • 基于IP地址实现多虚拟主机

  • 基于端口号实现多虚拟主机

  • 基于域名实现多虚拟主机

1 基于域名实现多虚拟主机

在 Nginx 中配置多个 server 段,每个 server 中设置一个虚拟主机配置,客户端访问服务器时,会根据客户端请求头中的 Host 字段值来匹配 server 段中的配置,从而访问不同的网站​​​​​​​

[root@ubuntu ~]# cd /etc/nginx/sites-enabled/
#设置两个域名配置文件[root@ubuntu sites-enabled]# cat www.m99-josedu.comserver {  listen 80;  server_name www.m99-josedu.com;  root /var/www/html/www.m99-josedu.com;}
[root@ubuntu sites-enabled]# cat www.m99-josedu.netserver {  listen 80;  server_name www.m99-josedu.net;  root /var/www/html/www.m99-josedu.net;
#修改默认页面,创建网站目录和首页[root@ubuntu ~]# mv /var/www/html/index.nginx-debian.html /tmp/[root@ubuntu ~]# echo "welcome to nginx" > /var/www/html/index.html[root@ubuntu ~]# mkdir /var/www/html/www.m99-josedu.{com,net}[root@ubuntu ~]# echo "this page from com" > /var/www/html/www.m99-josedu.com/index.html[root@ubuntu ~]# echo "this page from net" > /var/www/html/www.m99-josedu.net/index.html[root@ubuntu ~]# tree /var/www/html//var/www/html/├── index.html├── www.m99-josedu.com│   └── index.html└── www.m99-josedu.net    └── index.html2 directories, 3 files
#测试配置文件并重新加载服务[root@ubuntu ~]# nginx -tnginx: the configuration file /etc/nginx/nginx.conf syntax is oknginx: configuration file /etc/nginx/nginx.conf test is successful[root@ubuntu ~]# systemctl reload nginx.service
#客户端配置域名解析并测试[root@ubuntu ~]# cat /etc/hosts10.0.0.206 www.m99-josedu.com www.m99-josedu.net[root@ubuntu ~]# curl www.m99-josedu.comthis page from com[root@ubuntu ~]# curl www.m99-josedu.netthis page from net

1.1 设置虚拟主机的默认主页​​​​​​​

#当前没有设置 index,使用默认index配置[root@ubuntu ~]# cat /etc/nginx/sites-enabled/www.m99-josedu.comserver {  listen 80;  server_name www.m99-josedu.com;  root /var/www/html/www.m99-josedu.com;}
[root@ubuntu ~]# ls -l /var/www/html/www.m99-josedu.com/total 12-rw-r--r-- 1 root root 4 Jan 23 17:49 a.txt-rw-r--r-- 1 root root 8 Jan 23 17:49 default.htm-rw-r--r-- 1 root root 19 Jan 23 09:05 index.html
#测试,默认 index.html 生效[root@ubuntu ~]# curl www.m99-josedu.comthis page from com
#修改配置[root@ubuntu ~]# cat /etc/nginx/sites-enabled/www.m99-josedu.comserver {  listen 80;  index index.html default.htm a.txt;  server_name www.m99-josedu.com;  root /var/www/html/www.m99-josedu.com;
#重载生效[root@ubuntu ~]# systemctl reload nginx.service
#客户端测试 默认页面是 index.html[root@ubuntu ~]# curl www.m99-josedu.comthis page from com
#服务器上删除 index.html[root@ubuntu ~]# rm -f /var/www/html/www.m99-josedu.com/index.html[root@ubuntu ~]# ls /var/www/html/www.m99-josedu.com/a.txt default.htm
#客户端测试 默认页面是 default.htm[root@ubuntu ~]# curl www.m99-josedu.comdefault
#服务器上删除 default.htm[root@ubuntu ~]# rm -f /var/www/html/www.m99-josedu.com/default.htm[root@ubuntu ~]# ls /var/www/html/www.m99-josedu.com/a.txt
#客户端测试 默认页面是 a.txt[root@ubuntu ~]# curl www.m99-josedu.comaaa
#服务器上删除 a.txt[root@ubuntu ~]# rm -f /var/www/html/www.m99-josedu.com/a.txt[root@ubuntu ~]# ls /var/www/html/www.m99-josedu.com/
#客户端测试 报错[root@ubuntu ~]# curl www.m99-josedu.com<html><head><title>403 Forbidden</title></head><body><center><h1>403 Forbidden</h1></center><hr><center>nginx</center></body></html>

1.2 设置服务器的默认虚拟主机

用 http 协议访问服务器IP或没有在服务器上配置的域名时,会被默认虚拟主机命中​​​​​​​

#此时如果客户端直接访问服务器IP地址,能访问到默认页面[root@ubuntu ~]# curl http://10.0.0.206welcome to nginx
#在主配置文件 /etc/nginx.conf 中,包含了虚拟主机配置文件[root@ubuntu ~]# cat /etc/nginx/nginx.confinclude /etc/nginx/sites-enabled/*;
#查看当前的虚拟主机配置[root@ubuntu ~]# ls -lh /etc/nginx/sites-enabled/total 8.0Klrwxrwxrwx 1 root root 34 Jan 21 00:36 default -> /etc/nginx/sitesavailable/default-rw-r--r-- 1 root root 100 Jan 23 09:04 www.m99-josedu.com-rw-r--r-- 1 root root 100 Jan 23 09:06 www.m99-josedu.net
#查看默认配置[root@ubuntu ~]# cat /etc/nginx/sites-enabled/default | grep -Ev "#|^$"server {  listen 80 default_server; #default_server 表示默认虚拟主机配置  listen [::]:80 default_server; #default_server 表示默认虚拟主机配置  root /var/www/html;  index index.html index.htm index.nginx-debian.html;  server_name _;  location / {    try_files $uri $uri/ =404;  }
#客户端增加 abc.m99-josedu.org def.m99-josedu.org 的解析#但服务端没有该域名的配置[root@ubuntu ~]# cat /etc/hosts10.0.0.206 www.m99-josedu.com www.m99-josedu.net abc.m99-josedu.org def.m99-josedu.org
#测试,被服务端兜底的配置命中[root@ubuntu ~]# curl abc.m99-josedu.orgwelcome to nginx[root@ubuntu ~]# curl def.m99-josedu.orgwelcome to nginx​​​​​​​
#修改服务端配置,新增域名解析[root@ubuntu ~]# cat /etc/nginx/sites-enabled/abc.m99-josedu.orgserver {  listen 80;  server_name abc.m99-josedu.org;  root /var/www/html/abc.m99-josedu.org;}
[root@ubuntu ~]# mkdir /var/www/html/abc.m99-josedu.org[root@ubuntu ~]# echo "this page from abc.m99-josedu.org" > /var/www/html/abc.m99-josedu.org/index.html[root@ubuntu ~]# systemctl reload nginx.service
#客户端测试-命中域名配置[root@ubuntu ~]# curl abc.m99-josedu.orgthis page from abc.m99-josedu.org
#客户端测试-命中默认配置[root@ubuntu ~]# curl def.m99-josedu.orgwelcome to nginx​​​​​​
#去掉默认配置中的 default_server[root@ubuntu ~]# cat /etc/nginx/sites-enabled/defaultserver {  #listen 80 default_server;  #listen [::]:80 default_server;  listen 80;  ......
#重载服务并测试[root@ubuntu ~]# systemctl reload nginx.service[root@ubuntu ~]# curl abc.m99-josedu.orgthis page from abc.m99-josedu.org
#此处被 abc 的配置命中[root@ubuntu ~]# curl def.m99-josedu.orgthis page from abc.m99-josedu.org
#IP也被 abc 配置命中[root@ubuntu ~]# curl http://10.0.0.206this page from abc.m99-josedu.org
#在没有定义 default_server 的情况下,默认会被第一个配置文件命中#主配置文件中会按此顺序引用文件[root@ubuntu ~]# ls /etc/nginx/sites-enabled/abc.m99-josedu.org default www.m99-josedu.com www.m99-josedu.net[root@ubuntu ~]# ls -l /etc/nginx/sites-enabled/total 12-rw-r--r-- 1 root root 100 Jan 23 10:03 abc.m99-josedu.orglrwxrwxrwx 1 root root 34 Jan 21 00:36 default -> /etc/nginx/sitesavailable/default-rw-r--r-- 1 root root 100 Jan 23 09:50 www.m99-josedu.com-rw-r--r-- 1 root root 100 Jan 23 09:06 www.m99-josedu.net
#修改文件名[root@ubuntu ~]# mv /etc/nginx/sites-enabled/{www.m99-josedu.com,aaa.m99-josedu.com}
#重载服务[root@ubuntu ~]# systemctl reload nginx.service[root@ubuntu ~]# ls /etc/nginx/sites-enabled/aaa.m99-josedu.com abc.m99-josedu.org default www.m99-josedu.net
#再次测试,默认被最先引用的配置文件命中[root@ubuntu ~]# curl def.m99-josedu.orgthis page from com[root@ubuntu ~]# curl http://10.0.0.206this page from com
#改回文件名,并设置 default_server[root@ubuntu ~]# mv /etc/nginx/sites-enabled/{aaa.m99-josedu.com,www.m99-josedu.com}[root@ubuntu ~]# ls /etc/nginx/sites-enabled/abc.m99-josedu.org default www.m99-josedu.com www.m99-josedu.net
#www.m99-josedu.net 文件在引用时被放在最后,但设置了 default_server[root@ubuntu ~]# cat /etc/nginx/sites-enabled/www.m99-josedu.netserver {  listen 80 default_server;  server_name www.m99-josedu.net;  root /var/www/html/www.m99-josedu.net;}[root@ubuntu ~]# systemctl reload nginx.service
#客户端测试[root@ubuntu ~]# curl http://10.0.0.206this page from net[root@ubuntu ~]# curl def.m99-josedu.orgthis page from net

2 基于IP地址实现多虚拟主机​​​​​​​

#添加IP[root@ubuntu ~]# ip a a 10.0.0.216/24 dev ens33[root@ubuntu ~]# ip a a 10.0.0.226/24 dev ens33[root@ubuntu ~]# ip a a 10.0.0.236/24 dev ens33[root@ubuntu ~]# ip a s ens332: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000    link/ether 00:0c:29:11:98:d9 brd ff:ff:ff:ff:ff:ff    altname enp2s1    inet 10.0.0.206/24 metric 100 brd 10.0.0.255 scope global dynamic ens33      valid_lft 1118sec preferred_lft 1118sec    inet 10.0.0.216/24 scope global secondary ens33      valid_lft forever preferred_lft forever    inet 10.0.0.226/24 scope global secondary ens33      valid_lft forever preferred_lft forever    inet 10.0.0.236/24 scope global secondary ens33      valid_lft forever preferred_lft forever    inet6 fe80::20c:29ff:fe11:98d9/64 scope link      valid_lft forever preferred_lft forever
#恢复 default_server ,为域名绑定不同的IP[root@ubuntu ~]# cat /etc/nginx/sites-enabled/abc.m99-josedu.orgserver {  listen 10.0.0.206:80;  listen 10.0.0.216:80;  server_name abc.m99-josedu.org;  root /var/www/html/abc.m99-josedu.org;}
[root@ubuntu ~]# cat /etc/nginx/sites-enabled/www.m99-josedu.comserver {  listen 10.0.0.226:80;  server_name www.m99-josedu.com;  root /var/www/html/www.m99-josedu.com;}
[root@ubuntu ~]# ls /etc/nginx/sites-enabled/abc.m99-josedu.org default www.m99-josedu.com www.m99-josedu.net[root@ubuntu ~]# systemctl reload nginx
#客户端修改hosts 文件并测试[root@ubuntu ~]# cat /etc/hosts10.0.0.206 www.m99-josedu.net10.0.0.216 abc.m99-josedu.org10.0.0.226 www.m99-josedu.com[root@ubuntu ~]# curl www.m99-josedu.comthis page from com[root@ubuntu ~]# curl abc.m99-josedu.orgthis page from abc.m99-josedu.org[root@ubuntu ~]# curl www.m99-josedu.comthis page from com
[root@ubuntu ~]# curl 10.0.0.206this page from abc.m99-josedu.org[root@ubuntu ~]# curl 10.0.0.216this page from abc.m99-josedu.org[root@ubuntu ~]# curl 10.0.0.226this page from com[root@ubuntu ~]# curl 10.0.0.236welcome to nginx

3 基于端口号实现多虚拟主机​​​​​​​

#服务器上所有IP 的81,82端口都会被此规则匹配[root@ubuntu ~]# cat /etc/nginx/sites-enabled/abc.m99-josedu.orgserver {  listen 81;  listen 82;  server_name abc.m99-josedu.org;  root /var/www/html/abc.m99-josedu.org;
#所有88端口的访问都会被此规则匹配[root@ubuntu ~]# cat /etc/nginx/sites-enabled/www.m99-josedu.comserver {  listen 88;  server_name www.m99-josedu.com;  root /var/www/html/www.m99-josedu.com;}[root@ubuntu ~]# systemctl reload nginx.service
#客户端测试[root@ubuntu ~]# curl 10.0.0.206welcome to nginx[root@ubuntu ~]# curl 10.0.0.206:81this page from abc.m99-josedu.org[root@ubuntu ~]# curl 10.0.0.206:82this page from abc.m99-josedu.org[root@ubuntu ~]# curl 10.0.0.206:88this page from com
#用默认端口,被默认规则匹配[root@ubuntu ~]# curl abc.m99-josedu.orgwelcome to nginx
#指定域名和端口[root@ubuntu ~]# curl abc.m99-josedu.org:81this page from abc.m99-josedu.org[root@ubuntu ~]# curl abc.m99-josedu.org:82this page from abc.m99-josedu.org
#指定域名和端口,被服务器上默认 88 匹配[root@ubuntu ~]# curl abc.m99-josedu.org:88this page from com
http://www.xdnf.cn/news/278839.html

相关文章:

  • llfc项目TCP服务器笔记
  • Linux常用命令30——groupadd创建新的用户组
  • 状态值函数与状态-动作值函数
  • MVP架构梳理
  • Dubbo(95)如何在社交网络中应用Dubbo?
  • 注意力机制
  • 2025年PMP 学习一
  • 文章记单词 | 第60篇(六级)
  • mysql中int(1) 和 int(10) 有什么区别?
  • STM32GPIO输入实战-按键key模板及移植
  • I.MX6U的GPIO配置和LED点灯实验。
  • leetcode:最小覆盖字符串
  • 【操作系统】吸烟者问题
  • NHANES指标推荐:LC9
  • Android第四次面试总结之Java基础篇(补充)
  • 【NTN 卫星通信】NTN关键问题的一些解决方法(一)
  • 55认知干货:深空产业
  • 2022年第十三届蓝桥杯省赛B组Java题解
  • 128. 最长连续序列
  • 【人工智能】大模型安全的深度剖析:DeepSeek漏洞分析与防护实践
  • 牛客周赛91 D题(数组4.0) 题解
  • 如何用更少的显存训练 PyTorch 模型
  • 【Java JUnit单元测试框架-60】深入理解JUnit:Java单元测试的艺术与实践
  • Spring AI 实战:第九章、Spring AI MCP之万站直通
  • HTML5实战指南:语义化标签与表单表格高级应用
  • AI日报 · 2025年5月04日|Hugging Face 启动 MCP 全球创新挑战赛
  • 《工业社会的诞生》章节
  • 相向双指针-16. 最接近的三数之和
  • 基于AWS Marketplace的快速解决方案:从选型到部署实战
  • OpenFAST 开源软件介绍