Apache和Nginx实现虚拟主机的3种方式
目录
首先介绍一下Apache和nginx:
Nginx和Apache的不同之处:
虚拟主机
准备工作
Apache实现:
方法1:使用不同的ip来实现
方法2:使用相同的ip,不同的端口来实现
方法3:使用相同的ip,相同的端口,不同的主机名(域名)
Nginx实现:
方法1:使用不同的ip来实现
方法2:使用相同的ip,不同的端口来实现
方法3:使用相同的ip,相同的端口,不同的主机名(域名)
首先介绍一下Apache和nginx:
Apache(Apache HTTP Server):是一个模型化的服务器,可以运行在几乎所有的服务器上。其属于应用服务器
特点:支持模块多、性能稳定、Apache本身是静态解析,适合静态HTML、图片,但是可以通过扩展脚本、模块等支持动态页面等
Nginx:是俄罗斯人编写的十分轻量级的HTTP服务器,是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP代理服务器,
特点:占有内存少,并发能力强、抑郁开发、部署方便。Niginx支持多语言通用服务器
Nginx和Apache的不同之处:
- Nginx配置简介,Apache较为复杂;
- Nginx静态处理性能比Apache高很多
- Apache是同步多进程模型,一个连接诶对应一个进程;Nginx是异步的,多个连接可以对一个进程
- Nginx处理静态文件好,耗费内存少;动态请求Apache比较擅长,Nginx更适合去做静态和反向
- Nginx适合做前端服务器,负载性能很好;Nginx本身就是一个反向代理服务器,且支持负载均衡
虚拟主机
解决的问题:解决一台web服务器运行多个web应用
准备工作
首先本次测试环境运行在虚拟机中:使用center os 7
然后进入配置文件中:
vim /etc/httpd/conf/httpd.conf
找到上图的位置
1.将ServerName前的注释删除,即开启了www.example.com这个域名的访问
2.将Require all denied修改为 granted ,即允许所有的请求
3.找到这里增加一条;作用是配置php的配置环境让php可以正常使用
4.找到这里在后面增加一个 index.php,即增加了一个php页面
配置完成后重启http服务:
systemctl start httpd
配置LNMP环境:
安装所有需要的软件包:
yum install epel-release.noarch
yum install nginx mariadb-server.x86_64 mariadb php php-fpm.x86_64 php-mysql -y
关闭selinux:
setenforce 0
启动:
systemctl start nginx
systemctl start php-fpm.service
Apache实现:
方法1:使用不同的ip来实现
(1)首先创建一个目录:
mkdir /www/
(2)创建日志存放的目录:
mkdir /www/logs
(3)为两个目录下的index.html写入内容:
echo "Hello Apache" > /www/index.html
(4)为网卡ens160增加一个ip地址:
nmcli connection modify ens33 +ipv4.addresses 192.168.159.250/24 ipv4.method manual
(5)激活该地址:
nmcli con up ens33
(6)安装离线帮助包:
dnf install -y httpd-manual
(7)重启httpd服务:
systemctl restart httpd
(8)在浏览器中打开帮助手册:(192.168.159.200/mantal Apache HTTP Server Version 2.4 Documentation - Apache HTTP Server Version 2.4)
(9)进入配置路径:
cd /etc/httpd/conf.d/
(10) vim VirtualHost.conf 将以下内容写入:
<Directory "/www/">Options Indexes FollowSymLinksAllowOverride None Require all granted
</Directory>
<VirtualHost 192.168.159.200:80> DocumentRoot "/www" ServerName www1.example.com ErrorLog "/www/logs/error_log"CustomLog "/www/logs/access_log" combined
</VirtualHost>
<VirtualHost 192.168.159.250:80> DocumentRoot "/www" ServerName www2.example.com ErrorLog "/www/logs/error_log" CustomLog "/www/logs/access_log" combined
</VirtualHost>
(11)检查一下是否有语法错误
httpd -t
(12)重启httpd:
systemctl restart httpd
注:如果这里不成功很有可能和selinux有关
关闭selinux:
setenforce 0
(13)使用浏览器测试:
可以看到,我们成功的实现了不同的ip地址,访问同一个资源
方法2:使用相同的ip,不同的端口来实现
(1)首先将上面添加的ip删除:
nmcli connection modify ens33 -ipv4.addresses 192.168.159.250/24 ipv4.method manual
nmcli con up ens33
(3)vim /etc/http/conf.d/VirtualHost写入以下内容:
Listen 81
Listen 82
<Directory "/www/">
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
<VirtualHost 192.168.159.200:81>DocumentRoot "/www" ServerName www1.example.comErrorLog "/www/logs/error_log"CustomLog "/www/logs/access_log" combined
</VirtualHost>
<VirtualHost 192.168.159.200:82> DocumentRoot "/www" ServerName www2.example.com ErrorLog "/www/logs/error_log"CustomLog "/www/logs/access_log" combined
</VirtualHost>
(4)重启httpd:
systemctl restart httpd
(5)防火墙放行81和82端口:
firewall-cmd --permanent --add-port=81-82/tcpsuccess
firewall-cmd --reload 让防火墙立即生效success
(6)使用浏览器进行测试:
方法3:使用相同的ip,相同的端口,不同的主机名(域名)
(1)将配置文件修改为:
<Directory "/www/">
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
<VirtualHost 192.168.159.200:80>DocumentRoot "/www"ServerName www1.example.comErrorLog "/www/logs/error_log"CustomLog "/www/logs/access_log" combined
</VirtualHost>
<VirtualHost 192.168.159.200:80>DocumentRoot "/www" ServerName www2.example.com ErrorLog "/www/logs/error_log"CustomLog "/www/logs/access_log" combined
</VirtualHost>
(2)重启:
systemctl restart httpd
(3)在windowC:\Windows\System32\drivers\etc的路径中的hosts中添加对应关系:
192.168.159.200 www1.example.com www2.example.com
测试:
Nginx实现:
方法1:使用不同的ip来实现
为当前网卡增加一个ip
nmcli con modify ens33 +ipv4.addresses 192.168.159.222/24
nmcli con up ens33
注:这里将ip地址修改为自己主机一个网段的ip地址
创建文件夹:
mkdir /www/
为主页面中写入内容:vim index.html
"hello 我的路径是www/index.html"
为这个页面创建日志文件,后面配置虚拟主机会用到
mkdir /www/logs
然后修改配置文件:
vim /etc/nginx/conf.d/test.conf
将以下内容写入:
server {listen 80;server_name 192.168.159.200;charset utf-8;index index.html;root /www/;
}
server {listen 80;server_name 192.168.159.201;charset utf-8;index index.html;root /www/;}
测试:
根据结果我们可以看到,使用不容的ip地址访都问到了我们写的主页面
方法2:使用相同的ip,不同的端口来实现
这里首先将之前新增加的ip删除掉:
nmcli con modify ens33 -ipv4.addresses 192.168.159.201
nmcli con up ens33
修改虚拟主机为:
server {listen 81;server_name 192.168.159.200;charset utf-8;index index.html;root /www/web1;
}
server {listen 82;server_name 192.168.159.200;charset utf-8;index index.html;root /www/web2;}
防火墙放行tcp81/82端口,或者关闭防火墙
上面的Apache实现时使用了方形端口,那我这里直接关闭防火墙:
systemctl stop firewall.service
重启nginx服务:
systemctl restart nginx.service
测试:
方法3:使用相同的ip,相同的端口,不同的主机名(域名)
修改配置文件为:
server {listen 80;server_name www1.example.com;charset utf-8;index index.html;root /www/web1;
}
server {listen 80;server_name www2.example.com;charset utf-8;index index.html;root /www/web2;}
在window主机中的host中增加对应关系
192.168.159.200 www1.example.com
192.168.159.200 www2.example.com
测试:
到这里Nginx和Apache三种虚拟主机的配置就已经全部完成了!
相关文章:
Apache和Nginx实现虚拟主机的3种方式
目录 首先介绍一下Apache和nginx: Nginx和Apache的不同之处: 虚拟主机 准备工作 Apache实现: 方法1:使用不同的ip来实现 方法2:使用相同的ip,不同的端口来实现 方法3:使用相同的ip&…...
【DP】背包问题全解
一.简介 DP(动态规划)背包问题是一个经典的组合优化问题,通常用来解决资源分配的问题,如货物装载、投资组合优化等。问题的核心思想是在有限的资源约束下,选择一组物品以最大化某种价值指标,通常是总价值或…...
04 jenkins中使用各种变量(Powershell、cmd)
批处理中使用jenkins内部和变量插件定义的环境变量:%WORKSPACE%Powershell插件中使用jenkins内部环境变量:${ENV:WORKSPRACE}Powershell函数内部使用函数入参:$($dllname)Powershell中定义变量:$DllNamePowershell中使用powershel…...
2023年云计算的发展趋势
随着互联网和信息技术的快速发展,云计算已经成为了企业和个人的重要工具,而在未来,云计算仍然会持续发展,并且发展趋势会更加迅猛。在本文中,我们将讨论2023年云计算的发展趋势。 一、混合云将成为主流 混合云是指将公…...
工作十年+的测试应该具备什么能力?
大概是2014年的时候,我开始接触面试工作,就是从应聘者转为面试官,记得印象深刻的是面试了一位做了8年的测试。对方气场很足,嗯,毕竟那时的我还只是一个3、4年经验的小测试,相反,印象深刻的并不是…...
区块链链游合约系统开发项目模式技术方案
随着区块链技术的发展,链游合约系统开发逐渐成为了一个备受关注的项目。本文将探讨区块链链游合约系统开发项目的技术方案,包括项目背景、开发目标、技术架构、系统流程、安全措施等方面的内容。 一、项目背景 链游是一种基于区块链技术的游戏…...
业务出海之服务器探秘
这几年随着国内互联网市场的逐渐饱和,越来越多的公司加入到出海的行列,很多领域都取得了很不错的成就。虽然出海可以获得更加广阔的市场,但也需要面对很多之前在国内可能没有重视的一些问题。集中在海外服务器的选择维度上就有很大的变化。例…...
飞天使-django创建一个初始项目过程
创建django项目 运行项目 运行命令 pyhont manage.py runserver 然后访问 http://127.0.0.1:8000/, 则可以打开本地新建的项目 虚拟环境的部署-mac 在一台计算机上可以通过虚拟环境实现多个版本Django的开发环境 安装虚拟环境工具:如果你的系统中没有安…...
【工具插件类教学】全局积雪系统和雪痕迹显示(移动痕迹)
目录 一、演示场景对比效果 二、导入工具插件 三、使用流程 1.添加脚本组件GlobalSnow...
软考-高级-系统架构设计师教程(清华第2版)【第3章 信息系统基础知识(p120~159)-思维导图】
软考-高级-系统架构设计师教程(清华第2版)【第3章 信息系统基础知识(p120~159)-思维导图】 课本里章节里所有蓝色字体的思维导图...
STM32基础--NVIC中断控制器
一、NVIC是什么? NVIC是一种中断控制器。当一个中断正在处理时,另一个更高优先级的中断可以打断当前中断的执行,并立即得到处理。这种机制使得处理器在高速运行的同时,能够及时响应不同优先级的中断请求。 二、有哪些优先级&…...
使用matlab实现图像信号的色彩空间转换
利用matlab对图像信号进行读取,并对RGB空间进行转换,如转换到HSI空间等。 下面的这个代码是在使用了rgb2hsi()方法失败后,进行修改的。 rgb2hsi(img)这个方法可以将RGB图像转换为HIS图像;但是爆出了 Untitled5(line 5)hsi rgb2h…...
Vatee万腾科技决策力的引领创新:Vatee数字化视野的崭新天地
在数字时代的激烈竞争中,Vatee万腾以其科技决策力的引领,开创了数字化视野的崭新天地。这并不仅仅是一场技术的飞跃,更是一次对未来的深刻洞察和引领创新的勇敢实践。 Vatee万腾的科技决策力不仅仅停留在数据分析和算法的运用,更是…...
Go语言安装教程
【Go系列-1】-Go安装教程 环境提前准备 安装的时候可以选择自己的目录进行环境管理 E:\Z_Enviroment\Go创建文件夹: E:\Z_Enviroment\Go E:\Z_Enviroment\GoWorks E:\Z_Enviroment\GoWorks\bin E:\Z_Enviroment\GoWorks\pkg E:\Z_Enviroment\GoWorks\src环境变量…...
MVVM框架:图片加载有问题
一、前言:在我使用ImageView加载图片的时候添加如下代码发现报错 app:imageUrl"{viewModel.observableField.assetImg}"报错如下错误 二、原因:是啥我不太清楚好像是没有imageView的适配器,后来我看了一下确实没有 public class I…...
一篇文章搞明白js运行机制——事件循环
1、解释 JavaScript 的执行机制。 JavaScript 的执行机制基于事件循环。事件循环包括一个任务队列(Task Queue)和一个微任务队列(Microtask Queue)。当一个函数被调用时,它被添加到微任务队列中。事件循环每次迭代都会…...
Leetcode 第 371 场周赛题解
Leetcode 第 371 场周赛题解 Leetcode 第 371 场周赛题解题目1:100120. 找出强数对的最大异或值 I思路代码复杂度分析 题目2:100128. 高访问员工思路代码复杂度分析 题目3:100117. 最大化数组末位元素的最少操作次数思路代码复杂度分析 题目4…...
keras转onnx,TensorFlow转tf.keras.models.load_model,onnx精度转换
参考: https://blog.csdn.net/Deaohst/article/details/126864267 转onnx 别直接转onnx。 先转PB: import tensorflow as tfmodel_path ./models/model.h5 # 模型文件 model tf.keras.models.load_model(model_path) model.sa…...
高可用架构设计
1. 引言 软件系统有三个追求:高性能、高并发、高可用,俗称三高。三者既有区别也有联系,门门道道很多,本篇讨论高可用 高可用技术的重要性在于保证系统的连续可用性,提高系统的稳定性和可靠性。它可以应对高并发和大规…...
qemu 之 uboot、linux 启动
目录 编译uboot、kernel 编译启动从 uboot 中引导启动 linux注参考 本文主要说明 arm64 在 qemu 上的相关启动。 编译 使用的是 qemu-8.1.1 版本,编译命令如下: ../configure --cc/usr/local/bin/gcc --prefix/home/XXX/qemu_out --enable-virtfs --enable-slir…...
网络编程(Modbus进阶)
思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...
《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》
在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中࿰…...
涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战
“🤖手搓TuyaAI语音指令 😍秒变表情包大师,让萌系Otto机器人🔥玩出智能新花样!开整!” 🤖 Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制(TuyaAI…...
css3笔记 (1) 自用
outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size:0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格ÿ…...
视觉slam十四讲实践部分记录——ch2、ch3
ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...
Linux 中如何提取压缩文件 ?
Linux 是一种流行的开源操作系统,它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间,使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的,要在 …...
如何更改默认 Crontab 编辑器 ?
在 Linux 领域中,crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用,用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益,允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...
PHP 8.5 即将发布:管道操作符、强力调试
前不久,PHP宣布了即将在 2025 年 11 月 20 日 正式发布的 PHP 8.5!作为 PHP 语言的又一次重要迭代,PHP 8.5 承诺带来一系列旨在提升代码可读性、健壮性以及开发者效率的改进。而更令人兴奋的是,借助强大的本地开发环境 ServBay&am…...
react菜单,动态绑定点击事件,菜单分离出去单独的js文件,Ant框架
1、菜单文件treeTop.js // 顶部菜单 import { AppstoreOutlined, SettingOutlined } from ant-design/icons; // 定义菜单项数据 const treeTop [{label: Docker管理,key: 1,icon: <AppstoreOutlined />,url:"/docker/index"},{label: 权限管理,key: 2,icon:…...
使用ch340继电器完成随机断电测试
前言 如图所示是市面上常见的OTA压测继电器,通过ch340串口模块完成对继电器的分路控制,这里我编写了一个脚本方便对4路继电器的控制,可以设置开启时间,关闭时间,复位等功能 软件界面 在设备管理器查看串口号后&…...












