【Web服务器集群】Apache配置与应用

news/2024/10/30 11:29:14/

文章目录

  • 一、构建虚拟web主机
    • 1.概述
    • 2.httpd服务支持的虚拟主机类型
    • 3.构建虚拟Web主机
      • 3.1基于域名的虚拟主机
      • 3.2基于IP地址的虚拟主机
      • 3.3基于端口的虚拟主机
    • 4.Apache连接保持
    • 5.Apache访问控制
  • 二、Apache日志管理
    • rotatelogs分隔工具
  • 三、总结
    • 1.Web虚拟主机部署步骤
    • 2.网页根目录与虚拟目录

一、构建虚拟web主机

1.概述

  虚拟web主机指的是在同一台服务器中运行多个web站点,其中每一个站点实际上并不独立占用整个服务器,因此被称为"虚拟"Web主机。通过虚拟Web主机服务可以充分利用服务器的硬件资源,从而大大降低网站构建及运行成本。

  使用httpd服务可以非常方便地构建虚拟主机服务器,只需要运行一个httpd服务就能够同时支撑大量的Web站点。Apache虚拟主机相当于一个在同一台服务器中却相互独立的站点,从而实现一台主机对外提供多个web服务,每个虚拟主机之间是独立的,互不影响的。

2.httpd服务支持的虚拟主机类型

虚拟机主机类型含义
基于域名为每个虚拟主机使用不同的域名,但是其对应的IP地址是相同的。例如,www.benet.comwww.accp.com站点的IP地址都是192.168.80.10这是使用最为普遍的虚拟 web主机类型。
基于IP地址为每个虚拟主机使用不同的域名,且各自对应的IP地址也不相同。这种方式需要为服务器配备多个网络接口,因此应用并不是非常广泛。
基于端口这种方式并不使用域名、IP地址来区分不同的站点内容,而是使用了不同的TCP端口号,因此用户在浏览不同的虚拟站点时需要同时指定端口号才能访问。

3.构建虚拟Web主机

3.1基于域名的虚拟主机

为虚拟主机提供域名解析

方法一:部署DNS域名解析服务器 来提供域名解析

###使用DNS脚本
[root@localhost ~]# vim IP.sh 
#!/bin/bash
read -p "请输入您的IP地址:" LAN_IP
mount /dev/sr0 /mnt &> /dev/null
#rpm -ivh /mnt/Packages/bind-9.9.4-50.el7.x86_64.rpm &> /dev/null
yum install -y bind
cp /etc/named.conf{,.bak}
sed -i -e '13 s/127.0.0.1/any/' -e '19 s/localhost/any/' /etc/named.conf
cp /etc/named.rfc1912.zones{,.bak}
sed -i '24 a zone "benet.com" IN {\n\ttype master;\n\tfile "benet.com.zone";\n\tallow-update { none; };\n};\n' /etc/named.rfc1912.zones
cp -p /var/named/named.localhost /var/named/benet.com.zone
sed -i -e '2 s/rname.invalid./admin/' -e '9 s/127.0.0.1/'$LAN_IP'/' -e '$a www IN A '$LAN_IP'' -e '10d' /var/named/benet.com.zone
systemctl restart named
[root@localhost ~]# ./IP.sh 
请输入您的IP地址:192.168.145.15
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
...
###修改域名文件
[root@localhost ~]# vim /etc/resolv.conf
nameserver 192.168.145.15
###添加其他域名
[root@localhost ~]# cd /var/named/
[root@localhost named]# ls
benet.com.zone  dynamic   named.empty      named.loopback
data            named.ca  named.localhost  slaves
[root@localhost named]# vim /etc/named.rfc1912.zones
zone "accp.com" IN {type master;file "accp.com.zone";allow-update { none; };
[root@localhost named]# cp -p benet.com.zone accp.com.zone
[root@localhost named]# systemctl restart named
###查看解析结果
[root@localhost named]# nslookup www.benet.com
Server:		192.168.145.15
Address:	192.168.145.15#53Name:	www.benet.com
Address: 192.168.145.15[root@localhost named]# nslookup www.accp.com
Server:		192.168.145.15
Address:	192.168.145.15#53Name:	www.accp.com
Address: 192.168.145.15

方法二:在/etc/hosts 文件中临时配置域名与IP地址的映射关系

echo "192.168.80.10 www.benet.com" >> /etc/hosts
echo "192.168.80.10 www.accp.com" >> /etc/hosts

为虚拟主机准备网页文档

[root@localhost ~]# mkdir -p /var/www/html/{benet,accp}
[root@localhost ~]# cd /var/www/html/
[root@localhost html]# echo "<h1>www.benet.com</h1>" > /var/www/html/benet/index.html
[root@localhost html]# echo "<h1>www.accp.com</h1>" > /var/www/html/accp/index.html

添加虚拟主机配置

[root@localhost html]# cd /usr/local/
###源码编译安装的虚拟主机配置文件路径
[root@localhost local]# vim /usr/local/httpd/conf/extra/httpd-vhosts.conf
###设置虚拟主机配置区域
<VirtualHost 192.168.145.15:80>###设置管理员邮箱,这行可忽略#ServerAdmin webmaster@dummy-host.example.com###设置网站根目录DocumentRoot "/var/www/html/benet"###设置Web站点的完整域名(主机名+域名)ServerName www.benet.com#ServerAlias www.dummy-host.example.com###设置错误日志文件的路径ErrorLog "logs/benet.com-error_log"####设置访问日志文件的路径CustomLog "logs/bent.com-access_log" common
</VirtualHost><VirtualHost 192.168.145.15:80>#ServerAdmin webmaster@dummy-host.example.comDocumentRoot "/var/www/html/accp"ServerName www.accp.com#ServerAlias www.dummy-host.example.comErrorLog "logs/accp.com-error_log"CustomLog "logs/accp.com-access_log" common
</VirtualHost>
[root@localhost local]# vim /etc/named.conf
options {allow-query     { any; };

注意:RPM或YUM安装的虚拟主机配置文件路径vim /etc/httpd/conf.d/vhosts.conf

设置访问控制

[root@localhost local]# vim /usr/local/httpd/conf/extra/httpd-vhosts.conf
#设置目录访问权限
<Directory "/var/www/html">#不允许重写Apache默认配置	AllowOverride None#不启用任何的服务器特性Options None#允许所有主机访问Require all granted
</Directory>

Options指令解释:

  Options指令的主要作用是控制特定目录将启用哪些服务器特性。可以在Apache服务配置文件的虚拟主机配置(VirtualHost)、特定目录配置(Directory)以及.htaccess文件中使用。

Options指令常用选项:

常用选项含义
None表示不启用任何的服务器特性。
FollowSymLinks服务器允许在此目录中使用符号连接(软链接)。
Indexes如果输入的网址对应服务器上的一个文件目录,而此目录中又没有Apache配置文件中的DirectoryIndex指令指定的文件(例如: DirectoryIndex index.html index.php),则列出该目录下的所有文件。
MultiViews如果客户端请求的路径可能对应多种类型的文件,那么服务器将根据客户端请求的具体情况自动选择一个最匹配客户端要求的文件。例如,在服务器站点的file文件夹下中存在名为hello.jpg和hello.html的两个文件,此时用户输入 http://localhost/file/hello ,如果在 file文件夹下并没有 hello子目录,那么服务器将会尝试在 file目录下查找形如 hello.*的文件,然后根据用户请求的具体情况返回最匹配要求的 hello.jpg或者 hello.html。
All表示除 MultiViews之外的所有特性。这也是Options指令的默认设置。

AllowOverride指令解释:

  .htaccess(分布式隐含配置文件):提供了针对每个目录改变配置的方法,即在一个特定的目录中放置一个包含特定指令的文件,其中的指令作用于此目录及其所有子目录。

  当AllowOverride设置成None时,相应的配置目录下的.htaccess文件是不被读取的,即无法生效。

  当AllowOverride设置成All时,每一次请求访问相应目录下的文件时,都会读取.htaccess文件的配置,意味着原Apache指令会被.htaccess文件中的指令重写。

  从性能和安全性考虑,一般都尽可能避免使用.htaccess文件,任何希望放在.htaccess文件中的配置,都可放在主配置文件(httpd.conf)的 <Directory>段中,而且高效。因此AllowOverride属性一般都配置成None 。

地址限制策略:

  • Require all granted:允许所有主机访问。
  • Require all denied:拒绝所有主机访问。
  • Require local:仅允许本地主机访问。
  • Require [not] host <主机名或域名列表>:允许或拒绝指定主机或域名访问。
  • Require [not] ip <IP 地址或网段列表>:允许或拒绝指定 IP 地址网络访问。

加载独立的配置文件

[root@localhost ~]# cd /usr/local/httpd/conf/
###源码编译安装的httpd服务主配置文件路径
[root@localhost conf]# vim httpd.conf
###--483行--取消注释
###加载独立的配置文件
Include conf/extra/httpd-vhosts.conf
[root@localhost conf]# systemctl restart named

注意:RPM或YUM安装的httpd服务主配置文件路径修改/etc/httpd/conf/httpd.conf,然后修改最后一行,已默认开启此项IncludeOptional conf.d/*.conf

在客户机中访问虚拟Web主机

http://www.benet.com
http://www.accp.com

在这里插入图片描述

3.2基于IP地址的虚拟主机

添加虚拟网卡或者再添加一张网卡

[root@localhost ~]# ifconfig ens32:1 192.168.145.100 netmask 255.255.255.0
[root@localhost ~]# ifconfig
ens32: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 192.168.145.15  netmask 255.255.255.0  broadcast 192.168.145.255inet6 fe80::fd54:3fb4:558d:82fb  prefixlen 64  scopeid 0x20<link>ether 00:0c:29:33:c5:93  txqueuelen 1000  (Ethernet)RX packets 24534  bytes 10252508 (9.7 MiB)RX errors 0  dropped 0  overruns 0  frame 0TX packets 12081  bytes 1879260 (1.7 MiB)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0ens32:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 192.168.145.100  netmask 255.255.255.0  broadcast 192.168.145.255ether 00:0c:29:33:c5:93  txqueuelen 1000  (Ethernet)

修改虚拟主机配置

###修改主配置文件中的监听地址
[root@localhost ~]# vim /usr/local/httpd/conf/httpd.conf 
Listen 192.168.145.15:80
Listen 192.168.145.100:80###源码编译安装的虚拟主机配置文件路径
[root@localhost local]# vim /usr/local/httpd/conf/extra/httpd-vhosts.conf
###设置虚拟主机配置区域
<VirtualHost 192.168.145.15:80>###设置管理员邮箱,这行可忽略#ServerAdmin webmaster@dummy-host.example.com###设置网站根目录DocumentRoot "/var/www/html/benet"###设置Web站点的完整域名(主机名+域名)ServerName www.benet.com#ServerAlias www.dummy-host.example.com###设置错误日志文件的路径ErrorLog "logs/benet.com-error_log"####设置访问日志文件的路径CustomLog "logs/bent.com-access_log" common
</VirtualHost><VirtualHost 192.168.145.100:80>#ServerAdmin webmaster@dummy-host.example.comDocumentRoot "/var/www/html/accp"ServerName www.accp.com#ServerAlias www.dummy-host.example.comErrorLog "logs/accp.com-error_log"CustomLog "logs/accp.com-access_log" common
</VirtualHost><Directory "/var/www/html"> Options None			AllowOverride None		Require all granted		
</Directory>

在客户机中浏览器访问虚拟 Web 主机

http://192.168.80.10
http://192.168.80.100

在这里插入图片描述

3.3基于端口的虚拟主机

修改虚拟主机配置

###修改主配置文件的监听端口
[root@localhost conf]# vim /usr/local/httpd/conf/httpd.conf 
Listen 192.168.145.15:666
Listen 192.168.145.15:888
###源码编译安装的虚拟主机配置文件路径
[root@localhost conf]# vim extra/httpd-vhosts.conf
<VirtualHost 192.168.145.15:666>#ServerAdmin webmaster@dummy-host.example.comDocumentRoot "/var/www/html/benet"ServerName www.benet.com#ServerAlias www.dummy-host.example.comErrorLog "logs/benet.com-error_log"CustomLog "logs/bent.com-access_log" common
</VirtualHost><VirtualHost 192.168.145.15:888>#ServerAdmin webmaster@dummy-host.example.comDocumentRoot "/var/www/html/accp"ServerName www.accp.com#ServerAlias www.dummy-host.example.comErrorLog "logs/accp.com-error_log"CustomLog "logs/accp.com-access_log" common
</VirtualHost>
[root@localhost conf]# systemctl restart httpd

在客户机中浏览器访问虚拟 Web 主机

在这里插入图片描述

4.Apache连接保持

vim /usr/local/httpd/conf/extra/httpd-default.conf
KeepAlive On			#设置是否打开连接保持功能,后面接OFF表示关闭,接ON表示打开。可以根据网站的并发请求量决定是否打开,即在高并发时打开连接保持功能,并发量不高时关闭此功能。MaxKeepAliveRequests 100		#用于设置在一次长连接中可以传输的最大请求数量,超过此最大请求数量就会断开连接,最大值的设置决定于网站中网页的内容,一般设置数量会多于网站中所有的元素。KeepAliveTimeout 5		#设置来自同一个客户端一次连接多次请求之间的最大间隔时间,即两次请求之间超过该时间连接就会自动断开,从而避免客户端占用连接资源。

如果要支持打开httpd-default.conf需要打开/usr/local/httpd/conf/httpd.conf 文件中最后注释行Include conf/extra/httpd-default.conf

5.Apache访问控制

创建用户认证数据文件

[root@localhost ~]# cd /usr/local/httpd/bin
[root@localhost bin]# ./htpasswd -c /usr/local/httpd/conf/user zhangsan
New password: 
Re-type new password: 
Adding password for user zhangsan
[root@localhost bin]# ./htpasswd /usr/local/httpd/conf/user lisi
New password: 
Re-type new password: 
Adding password for user lisi
[root@localhost bin]# cat /usr/local/httpd/conf/user 
zhangsan:$apr1$.My6vxsS$iUdKouegPjZ5yxXPNc1UW1
lisi:$apr1$0u3gAMew$KA/SdEe25Ow1.Zl/NYwWO1

-c选项表示新建用户数据文件,缺省时则表示指定的用户数据文件已经存在,用于添加新的用户或修改现有用户的密码。

添加用户授权配置

[root@localhost ~]# cd /usr/local/httpd/conf/
[root@localhost conf]# vim httpd.conf 
###--末行添加--
###设置虚拟目录的根目录,/test为虚拟目录名称
Alias /test /var/www/html/test	###设置虚拟目录配置区域
<Directory "/var/www/html/test">				###定义受保护的领域名称,会在认证对话框中显示AuthName "Hello!"###设置认证的类型,Basic表示基本认证AuthType Basic###设置用于保存用户账号和密码的认证文件的路径AuthUserFile /usr/local/httpd/conf/user###开启用户认证,只有认证文件中的合法用户才能访问Require valid-user		###设置用于保存组账号和密码的认证文件的路径#authgroupfile /usr/local/httpd/conf/group###仅允许指定用户访问#Require user zhangsan	####仅允许指定组访问#Require group zhangsan							
</Directory>

验证用户访问授权

[root@localhost conf]# mkdir -p /var/www/html/test
[root@localhost conf]# echo "<h1>this is vdir test</h1>" > /var/www/html/test/index.html
[root@localhost conf]# systemctl restart httpd

在客户机中浏览器访问

http://192.168.145.15:80/test

在这里插入图片描述

二、Apache日志管理

 &emsp随着网站的访问量增加,默认情况下Apache的单个日志文件也会越来越大;其日志文件占用磁盘空间很大,查看相关信息不方便,所以要对日志文件进行分隔。

rotatelogs分隔工具

使用Apache自带rotatelogs分隔工具,将Apache的日志进行按每天的日期自动分割。

[root@localhost ~]# vim /usr/local/httpd/conf/httpd.conf
###--275行--修改
###分割错误日志
ErrorLog "| /usr/local/bin/rotatelogs -l /var/log/httpd/error_%Y%m%d.log 86400"		
###--305行--修改
####分割访问日志
CustomLog "| /usr/local/bin/rotatelogs -l /var/log/httpd/access_%Y%m%d.log 86400" combined	
###创建分割后的日志文件保存目录
[root@localhost ~]# mkdir /var/log/httpd
[root@localhost ~]# cd /var/log/httpd/
[root@localhost httpd]# ls
[root@localhost httpd]# systemctl restart httpd
[root@localhost httpd]# ls 
access_20230529.log  error_20230529.log

注:开头的 | 为管道符号。-l选项表示使用本地时间为时间基准。86400表示一天,即每天生成一个新的日志文件。

客户端浏览器访问

http://192.168.145.15

在这里插入图片描述

服务器查看日志生成

[root@localhost httpd]# ls 
access_20230529.log  error_20230529.log

三、总结

1.Web虚拟主机部署步骤

  • 设置域名解析(DNS、hosts)。
  • 准备不同web站点的测试i网页文档。
  • 修改虚拟机配置文件
  • 添加网页文档所在目录的访问控制配置。
  • 修改主配置文件。加载虚拟机配置文件。
  • 重启服务,测试。

2.网页根目录与虚拟目录

网页根目录
DocumentRoot "/usr/local/httpd/htdocs"别名目录(虚拟目录)
Alias /file/var/www/html/file

http://www.ppmy.cn/news/104125.html

相关文章

java程序员找工作经验之谈,聊聊需要做好哪些关键点才能获得认可

我是18年本科毕业于双飞一本的交互设计&#xff0c;因为喜欢编程所以快考的计算机。当时初试过了复试没有过&#xff0c;被调剂到一个211大学的相关专业。这个专业从名称上来看跟计算机没有任何关系&#xff0c;但是他实际做的事情&#xff0c;或者说我在我导师那边做的事情&am…

算法当中的时间、空间复杂度?

1.究竟什么是时间复杂度 时间复杂度是一个函数&#xff0c;它定性描述该算法的运行时间 时间复杂度就是用来方便开发者估算出程序运行的答题时间。 通常会估算算法的操作单元数量来代表程序消耗的时间&#xff0c;这里默认CPU的每个单元运行消耗的时间都是相同的。 假设算法的…

K8s in Action 阅读笔记——【6】Volumes: attaching disk storage to containers

K8s in Action 阅读笔记——【6】Volumes: attaching disk storage to containers 在前三章中&#xff0c;我们介绍了Pods以及它们与ReplicationControllers、ReplicaSets、DaemonSets、Jobs和Services等Kubernetes资源的交互。现在&#xff0c;我们将回到Pod内部&#xff0c;…

Flink数据转换方法使用案例总结

目录 Flink数据转换方法使用案例MapFlatMapFilterKeyByReduceAggregationsWindowJoinUnionProjectDistinctSortPartitionIterateFold使用 Flink 数据转换 Conclusion 的案例问题描述解决方案结论 Flink数据转换方法使用案例 Apache Flink是一个分布式流处理框架&#xff0c;它…

Java最新版发送阿里短信教程

一、概述&#xff1a; 为什么现在的企业越来越多使用阿里云短信服务&#xff0c;究其原因是阿里云短信服务是一种可靠、高效、安全的短信发送服务&#xff0c;它具有以下优点&#xff1a; 高可靠性&#xff1a;阿里云短信服务采用全球领先的短信网关进行短信发送&#xff0c;确…

数据库基础——9.聚合函数

这篇文章来讲一下数据库中的聚合函数 目录 1. 聚合函数介绍 1.1 AVG和SUM函数 1.2 MIN和MAX函数 1.3 COUNT函数 2. GROUP BY 2.1 基本使用 2.2 使用多个列分组 2.3 GROUP BY中使用WITH ROLLUP 3. HAVING 3.1 基本使用 3.2 WHERE和HAVING的对比 4. SELECT的执…

【满分】【华为OD机试真题2023B卷 JAVAJS】字符串统计

华为OD2023(B卷)机试题库全覆盖,刷题指南点这里 字符串统计 知识点字符串 时间限制:1s 空间限制:256MB 限定语言:不限 题目描述: 给定两个字符集合,一个为全量字符集,一个为已占用字符集。已占用的字符集中的字符不能再使用,要求输出剩余可用字符集。 输入描述: 1、…

HTML <colgroup> 标签

实例 两个 colgroup 元素为表格中的三列规定了不同的对齐方式和样式(注意第一个 colgroup 元素横跨两列): <table width="100%" border="1"><colgroup span="2" align="left"></colgroup><colgroup align=&…