高性能 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.mzph.cn/bicheng/79805.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网星安全AWS攻防方案,重磅发布!

AWS介绍 AWS&#xff08;Amazon Web Services&#xff09; 是 Amazon 提供的云计算平台&#xff0c;提供了广泛的云服务&#xff0c;包括计算、存储、数据库、网络、安全、人工智能、大数据处理等功能&#xff0c;帮助企业和开发者构建、部署和管理应用程序。AWS 是全球最大的…

qt的containers里的QToolBox和QTabWidget

Tool Box是一个多层次的折叠面板&#xff0c;通常用于组织多个可展开/折叠的面板组&#xff0c;每个面板有一个标题栏&#xff0c;用户点击标题栏可以展开或收起内容区域。比如设置界面中的分类选项&#xff0c;每个分类可以展开查看详细内容。这样能节省空间&#xff0c;让界面…

【神经网络与深度学习】深度学习中的生成模型简介

深度学习中的生成模型 openai 的一个古早介绍 引言 深度学习中的生成模型能够学习数据分布并生成新数据&#xff0c;在人工智能的多个领域中都有重要应用。不同类型的生成模型在原理和结构上各有特点&#xff0c;适用于不同的任务&#xff0c;如图像生成、文本生成和时间序列…

js获取明天日期、Vue3大菠萝 Pinia的使用

直接上代码 const today new Date(2019, 2, 28) const finalDate new Date(today) finalDate.setDate(today.getDate() 3)console.log(finalDate) // 31 March 2019 安装 yarn add pinia # or with npm npm install pinia创建第一个store仓库 1、在src目录下创建store目录…

存储过程补充——定义条件、处理程序及游标使用

文章目录 1. 定义条件与处理程序1.1 定义条件1.2 处理程序1.3 案例演示 2. 游标2.1 使用游标第一步&#xff0c;声明游标第二步&#xff0c;打开游标第三步&#xff0c;使用游标&#xff08;从游标中取得数据&#xff09;第四步&#xff0c;关闭游标 2.2 举例2.3 小结 在 MySQL…

蓝桥杯单片机国赛模板——基于柳离风模板

蓝桥杯单片机国赛模板——基于柳离风模板 文章目录 蓝桥杯单片机国赛模板——基于柳离风模板一、工程结构二、USER文件夹main.c 三、BSP文件夹1、sys2、display3、key4、timer5、iic6、ds13027、onewire8、uart9、ultrasound 四、源码五、内存不够 一、工程结构 与省赛模板相比…

C与指针——常见库函数

字符串 #include<stdlibs.h> int abs(int); long labs(long); int rand(void);//0-RAND_MAX //字符串转值 int atoi(const char*); long atol(const char*); float atof(const char*);数学\排序 #include<math.h> \\常见三角&#xff0c;sqrt(); exp(); double p…

数学复习笔记 2

前言 朋友和我讨论了一个二重积分题&#xff0c;非常有意思。内容非常细致。整理如下&#xff1a; 二重积分 题目来源是 1000 上面的 16 题&#xff0c;积分区域是一个偏心圆&#xff0c;偏心圆的圆心在 y 轴上面&#xff0c;偏心圆是关于 y 轴对称的&#xff0c;可以看关于…

Javaweb项目--Mybatis,导入com.mysql.cj.jdbc.Driver时报错,Cannot resolve class ‘Driver‘

目录 问题解决方法结果 问题 在项目java文件下&#xff0c;包文件下的application.properties文件中&#xff0c;项目目录如下&#xff1a; 报错信息如下&#xff1a; 解决方法 在pom.xml文件中增加此依赖 结果 报错信息消失

分布式-redisson

分布式锁redisson 加锁流程缓存相关问题 加锁流程 redisson底层通过lua脚本实现加锁的原子性lock动作包含&#xff1a;加锁、设置超时时间、锁续命未获取到锁的线程通过获取信号量许可等待&#xff0c;所释放后释放信号量通知等待线程 缓存相关问题 缓存失效&#xff08;击穿…

Java基础学完,继续深耕(0505)Linux 常用命令

昨天休息了一天&#xff0c;没有写csdn 昨天和今天把Linux大概学了一下。总结一下常用命令&#xff0c;总结的不全。 Linux目录结构 / 是所有目录的顶点 目录结构像一颗倒挂的树 注意&#xff1a;/itheima 是绝对路径&#xff0c;是指根目录 / 下的itheima目录 itheima…

【AI论文】Sadeed:通过小型语言模型推进阿拉伯语变音

摘要&#xff1a;由于语言的形态丰富&#xff0c;阿拉伯语文本的变音符号仍然是自然语言处理中一个持续的挑战。 在本文中&#xff0c;我们介绍了一种基于微调解码器语言模型的新方法Sadeed&#xff0c;该方法改编自Kuwain 1.5B Hennara等人[2025]的模型&#xff0c;该模型最初…

学习海康VisionMaster之亮度测量

一&#xff1a;进一步学习了 今天学习下VisionMaster中的亮度测量&#xff1a;这个和前面学习的都不一样了&#xff0c;这个是测量ROI区域内的平均亮度等 1&#xff1a;什么是亮度测量&#xff1f; 我们工业上用的相机里面有一个感光芯片&#xff08;CCD/CMOS&#xff09;&…

学习路线(python)

Python从初级到专家的学习路线# 初级阶段 (1-3个月)基础语法数据结构文件操作推荐资源 中级阶段 (3-6个月)面向对象编程常用模块错误处理进阶特性推荐资源 高级阶段 (6-12个月)并发编程性能优化元编程设计模式推荐资源 专业方向 (选择1-2个方向深入)Web开发数据分析/科学计算机…

svn文件提交失败

这里写自定义目录标题 1报错项目2.解决办法1.安装sqlite3.exe 数据库2.sqlite3.exe放到svn 项目的主目录下&#xff0c;和.svn目录同级下, 可以直接在数据库目录下执行cmd命令。3.在当前目录下 cmd 运行命令 4.最后再项目的文件夹下&#xff0c;看是否可以 clean up了。--成功&…

调试——GDB、日志

调试——GDB、日志 1. gdb常用指令2. 如何生成core文件并调试&#xff1f;3. 如何调试正在运行的程序4. 调试多进程程序5. 调试多线程程序6. log日志 gcc编译器可以帮我们发现语法错误&#xff0c;但是对业务逻辑错误却无能为力。当我们想找出逻辑错误时&#xff0c;就需要调试…

redis----通用命令

文章目录 前言一、运行redis二、help [command]三、通用命令 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 学习一些通用命令 以下操作在windows中演示 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、运行redis 我们先c…

CatBoost算法原理及Python实现

一、概述 CatBoost 是在传统GBDT基础上改进和优化的一种算法&#xff0c;由俄罗斯 Yandex 公司开发&#xff0c;于2017 年开源&#xff0c;在处理类别型特征和防止过拟合方面有独特优势。 在实际数据中&#xff0c;存在大量的类别型特征&#xff0c;如性别、颜色、类别等&#…

五一假期作业

sub_process.c #include <stdio.h> // 标准输入输出库 #include <pthread.h> // POSIX线程库 #include <sys/ipc.h> // IPC基础定义&#xff08;如消息队列/共享内存&#xff09; #include <sys/msg.h> // 消息队列操作相关…

Liunx安装Apache Tomcat

目录 一、了解tomcat 二、下载 三、启动tomcat 四、网页访问tomcat 五、Tomcat修改默认8080端口 六、Tomcat创建项目步骤-实现项目对外访问 一、了解tomcat Apache Tomcat 是一个开源的 Java Servlet 容器 和 Web 服务器&#xff0c;主要用于运行基于 Java 的 Web 应用…