RH358配置Web服务器--使用 Apache HTTPD 对虚拟主机进行配置和故障排除

简介: RH358配置Web服务器--使用 Apache HTTPD 对虚拟主机进行配置和故障排除

RH358配置Web服务器–使用 Apache HTTPD 对虚拟主机进行配置和故障排除

介绍虚拟主机的配置和常见排错。

RH358专栏地址:https://blog.csdn.net/qq_41765918/category_11532281.html

1. 通过 VIrtual Hosts(虚拟主机)提供多个网站

虚拟主机允许一个web服务器为多个网站提供内容。web服务器可以根据客户端连接到的服务器的特定IP地址或客户端HTTP请求中的站点名称,使用不同的配置设置提供不同的内容。

当启动多个服务器来服务许多低流量站点的成本效益不高时,通常使用虚拟主机。例如,这在共享托管环境中很常见。

2. 配置Apache HTTPD虚拟主机

使用块指令覆盖虚拟主机主配置文件中的设置。每个虚拟主机都有自己的块。

在/etc/httpd/ conf.d/中单独的以.conf结尾的配置文件中配置虚拟主机是一种很好的做法。这使得部署和更新主机变得更容易,而不会影响web服务器配置的其他部分。

下面的示例是/etc/httpd/conf.d/site1.conf,它为site1设置了一个虚拟主机。它侦听服务器的192.168.0.1 IP地址。

<Directory /srv/site1/www>  # <Directory> 块定义在虚拟主机的 DocumentRoot 中提供网页
    Require all granted
    AllowOverride None
</Directory>

<VirtualHost 192.168.0.1:80> 
# 虚拟主机定义。对到达地址 192.168.0.1:80 的流量配置此虚拟主机
DocumentRoot /srv/site1/www 
# 此 DocumentRoot 设置仅适用于此虚拟主机,并覆盖主配置文件中的设置
ServerName site1.example.com
# 网站的名称。如果多个网站共享相同的 IP 地址,则将使用此设置和客户端的 HTTP 请求的主机名来确定是否将使用此虚拟主机。必须只⼀个 ServerName。如果某⼀站点响应多个名称(如 www.example.com 和 example.com),可使用ServerAlias 指令添加它们
ServerAdmin webmaster@site1.example.com
# 覆盖主配置文件中的设置。不同的虚拟主机可能有不同的ServerAdmin 用户
    ErrorLog "logs/site1_error_log"                  # 此虚拟主机相关的错误日志的位置
    CustomLog "logs/site1_access_log" combined   # 此虚拟主机相关的访问日志的位置
</VirtualHost>

将所有主服务器指令放在任何虚拟主机设置之前是一个很好的做法。这使得配置更容易理解。如果没有为虚拟主机显式设置,将使用主配置中的相同设置。

控制虚拟主机的选择

如果每个虚拟主机都配置了自己的私有IP地址,那么它就被称为基于IP的虚拟主机(首先匹配)

如果多个虚拟主机共享相同的IP地址,确定将流量发送到哪个虚拟主机的唯一方法是检查客户端的HTTP请求和虚拟主机的serverName和ServerAlias指令。这种配置中的虚拟主机有时称为基于名称的虚拟主机。在过去,基于名称的虚拟主机不能提供安全服务,但现在已经不是这样了。

指令的IP地址部分可以用星号(*)通配符替换,以匹配web服务器上的所有地址。

选择用于处理客户端请求的虚拟主机块,如下所示:

  • 当请求到达时,httpd首先尝试将传入连接的地址和端口与具有显式IP地址和端口集的虚拟主机匹配。如果匹配失败,则检查带有通配符IP地址的虚拟主机。如果恰好有一个匹配的虚拟主机定义,则使用基于ip的虚拟主机。

  • 如果有多个虚拟主机定义匹配,这就是基于名称的虚拟主机。如果客户端的HTTP请求包含一个Host: header, 识别服务器,客户端试图达到,寻找第一个虚拟主机列表加载的实现方式在头文件的名称作为其ServerName或ServerAlias,使用的是虚拟主机。当/etc/httpd/conf中包含有多个虚拟主机*.conf文件时,它们按系统的排序顺序加载(通常按文件名的字母顺序)。

  • 如果有一个虚拟主机定义,包含指令的IP地址部分。替换为_default_,它有一个匹配的端口,没有其他虚拟主机匹配,该虚拟主机将被使用。(匹配通配符IP地址的虚拟主机使用该定义,而不是同样匹配default_的虚拟主机)

  • 如果没有匹配的虚拟主机定义,“主”服务器配置将为请求服务。

3. 虚拟主机故障排除

在对虚拟主机进行故障排除时,有许多方法可以提供帮助。

  • 为每个虚拟主机配置一个单独的DocumentRoot,带有标识内容。

  • 为每个虚拟主机配置单独的日志文件,包括错误日志和访问日志。

  • 计算httpd解析虚拟主机定义的顺序。包含的文件将根据文件名以字母数字排序的顺序读取。

  • 逐个禁用虚拟主机,隔离问题。虚拟主机定义可以注释出配置文件,所包含的配置文件可以临时改名为不以.conf结尾的内容。

  • journalctl -u httpd.service 可显示仅限于与 httpd 服务相关的日志

4. 课本练习

[student@workstation ~]$ lab web-virtual start

  • 将设置一个web服务器,使用基于名称的虚拟主机提供多个网站。

  • 每个名称的DNS CNAME记录已设置为解析为servera机器的名称。

1. 安装软件

[root@servera ~]# yum -y install httpd

2. 创建内容目录

[root@servera ~]# mkdir -p /srv/{default,www-x.lab.example.com}/www

[root@servera ~]# echo "Coming Soon!" > /srv/default/www/index.html
[root@servera ~]# echo "www-x" > /srv/www-x.lab.example.com/www/index.html

[root@servera ~]# restorecon -Rv /srv/
Relabeled /srv/default/www from unconfined_u:object_r:var_t:s0 to unconfined_u:object_r:httpd_sys_content_t:s0
Relabeled /srv/default/www/index.html from unconfined_u:object_r:var_t:s0 to unconfined_u:object_r:httpd_sys_content_t:s0
Relabeled /srv/www-x.lab.example.com/www from unconfined_u:object_r:var_t:s0 to unconfined_u:object_r:httpd_sys_content_t:s0
Relabeled /srv/www-x.lab.example.com/www/index.html from unconfined_u:object_r:var_t:s0 to unconfined_u:object_r:httpd_sys_content_t:s0

3. 按要求创建虚拟主机

[root@servera ~]# vim /etc/httpd/conf.d/00-default-vhost.conf
<VirtualHost _default_:80>
  DocumentRoot /srv/default/www
  CustomLog "logs/default-vhost.log" combined
  <Directory /srv/default/www>
    Require all granted
  </Directory>
</VirtualHost>

[root@servera ~]# vim /etc/httpd/conf.d/01-www-x.lab.example.com-vhost.conf
<VirtualHost *:80>
  ServerName www-x.lab.example.com
  ServerAlias www-x
  DocumentRoot /srv/www-x.lab.example.com/www
  CustomLog "logs/www-x.lab.example.com.log" combined
  <Directory /srv/www-x.lab.example.com/www>
    Require all granted
  </Directory>
</VirtualHost>

**注意:**因为Directory指令嵌套在virtualHost指令中,所以它只应用于这个虚拟主机。其他虚拟主机使用这个目录的设置继承自主配置。这有助于确保对虚拟主机文档根的访问只授予拥有它的虚拟主机。

4. 启动并设置好防火墙

[root@servera ~]# systemctl enable --now httpd
Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/lib/systemd/system/httpd.service.
[root@servera ~]# firewall-cmd --permanent --add-service=http
[root@servera ~]# firewall-cmd --reload

5. 测试访问

[student@workstation ~]$ curl http://www-x.lab.example.com
www-x
[student@workstation ~]$ curl http://www-x
www-x
[student@workstation ~]$ curl http://servera.lab.example.com
Coming Soon!
[student@workstation ~]$ curl http://172.25.250.10
Coming Soon!

完成实验

[student@workstation ~]$ lab web-virtual finish

总结

  • 配置虚拟主机提供Web服务。
  • 虚拟主机故障排错。
  • 若喜欢金鱼哥的文章,顺手点个赞。也可点个关注,因为后续会不断上干货。

相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
目录
相关文章
|
存储 固态存储 Linux
从 0 学服务器虚拟化:VMware 搭建 3 个虚拟主机,个人 / 小企业够用的方案
服务器虚拟化技术通过在单台物理机上运行多个虚拟机,显著提升资源利用率和管理灵活性。本文以 VMware ESXi 8.0 Update 3e 为例,详解如何搭建经济实用的虚拟化环境,支持 3 个虚拟主机稳定运行,适合个人开发者和小企业降低硬件投入、实现数据本地化与安全存储。
2610 0
|
弹性计算 运维 Cloud Native
阿里云虚拟主机、轻量应用服务器、云服务器、云·速成美站、云·原生建站区别及选择参考
在选择阿里云产品完整自己网站搭建的时候,面对云虚拟主机、轻量应用服务器、云服务器ECS、云·速成美站和云·原生建站等多种选择,很多用户不是很清楚他们之间的区别。每种产品都有其独特的优势和适用场景,如何根据自己的需求和技术背景选择最适合的建站产品,成为了用户关注的焦点。本文将详细比较阿里云这五种建站产品的优势和劣势,以及它们的适用人群,以供选择参考。
|
存储 分布式计算 druid
大数据-152 Apache Druid 集群模式 配置启动【下篇】 超详细!(一)
大数据-152 Apache Druid 集群模式 配置启动【下篇】 超详细!(一)
450 1
大数据-152 Apache Druid 集群模式 配置启动【下篇】 超详细!(一)
|
缓存 前端开发 应用服务中间件
CORS跨域+Nginx配置、Apache配置
CORS跨域+Nginx配置、Apache配置
1036 7
|
消息中间件 分布式计算 druid
大数据-152 Apache Druid 集群模式 配置启动【下篇】 超详细!(二)
大数据-152 Apache Druid 集群模式 配置启动【下篇】 超详细!(二)
286 2
|
存储 消息中间件 druid
大数据-151 Apache Druid 集群模式 配置启动【上篇】 超详细!
大数据-151 Apache Druid 集群模式 配置启动【上篇】 超详细!
430 1
|
11月前
|
算法 Java Go
【GoGin】(1)上手Go Gin 基于Go语言开发的Web框架,本文介绍了各种路由的配置信息;包含各场景下请求参数的基本传入接收
gin 框架中采用的路优酷是基于httprouter做的是一个高性能的 HTTP 请求路由器,适用于 Go 语言。它的设计目标是提供高效的路由匹配和低内存占用,特别适合需要高性能和简单路由的应用场景。
744 4
|
缓存 JavaScript 前端开发
鸿蒙5开发宝藏案例分享---Web开发优化案例分享
本文深入解读鸿蒙官方文档中的 `ArkWeb` 性能优化技巧,从预启动进程到预渲染,涵盖预下载、预连接、预取POST等八大优化策略。通过代码示例详解如何提升Web页面加载速度,助你打造流畅的HarmonyOS应用体验。内容实用,按需选用,让H5页面快到飞起!
|
JavaScript 前端开发 API
鸿蒙5开发宝藏案例分享---Web加载时延优化解析
本文深入解析了鸿蒙开发中Web加载完成时延的优化技巧,结合官方案例与实际代码,助你提升性能。核心内容包括:使用DevEco Profiler和DevTools定位瓶颈、四大优化方向(资源合并、接口预取、图片懒加载、任务拆解)及高频手段总结。同时提供性能优化黄金准则,如首屏资源控制在300KB内、关键接口响应≤200ms等,帮助开发者实现丝般流畅体验。
|
前端开发 JavaScript Shell
鸿蒙5开发宝藏案例分享---Web页面内点击响应时延分析
本文为鸿蒙开发者整理了Web性能优化的实战案例解析,结合官方文档深度扩展。内容涵盖点击响应时延核心指标(≤100ms)、性能分析工具链(如DevTools时间线、ArkUI Trace抓取)以及高频优化场景,包括递归函数优化、网络请求阻塞解决方案和setTimeout滥用问题等。同时提供进阶技巧,如首帧加速、透明动画陷阱规避及Web组件初始化加速,并通过优化前后Trace对比展示成果。最后总结了快速定位问题的方法与开发建议,助力开发者提升Web应用性能。

热门文章

最新文章

推荐镜像

更多