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…...

第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...
Java 语言特性(面试系列2)
一、SQL 基础 1. 复杂查询 (1)连接查询(JOIN) 内连接(INNER JOIN):返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...

2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...
【AI学习】三、AI算法中的向量
在人工智能(AI)算法中,向量(Vector)是一种将现实世界中的数据(如图像、文本、音频等)转化为计算机可处理的数值型特征表示的工具。它是连接人类认知(如语义、视觉特征)与…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...

springboot整合VUE之在线教育管理系统简介
可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生,小白用户,想学习知识的 有点基础,想要通过项…...

C++ 设计模式 《小明的奶茶加料风波》
👨🎓 模式名称:装饰器模式(Decorator Pattern) 👦 小明最近上线了校园奶茶配送功能,业务火爆,大家都在加料: 有的同学要加波霸 🟤,有的要加椰果…...

Ubuntu Cursor升级成v1.0
0. 当前版本低 使用当前 Cursor v0.50时 GitHub Copilot Chat 打不开,快捷键也不好用,当看到 Cursor 升级后,还是蛮高兴的 1. 下载 Cursor 下载地址:https://www.cursor.com/cn/downloads 点击下载 Linux (x64) ,…...

android RelativeLayout布局
<?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"android:gravity&…...
前端中slice和splic的区别
1. slice slice 用于从数组中提取一部分元素,返回一个新的数组。 特点: 不修改原数组:slice 不会改变原数组,而是返回一个新的数组。提取数组的部分:slice 会根据指定的开始索引和结束索引提取数组的一部分。不包含…...