Apache配置与应用

Apache配置与应用

1.Apache连接保持

HTTP 是属于应用层的面向对象协议, 基于 TCP 协议之上的可靠传输。 每次在进行HTTP 连接之前, 需要先进行 TCP 连接, 在 HTTP 连接结束后要对 TCP 连接进行终止, 每个 TCP 连接都需要进行三次握手与四次断开。 HTTP 协议不会对之前发生过的请求和响应进行管理, 所以频繁地建立与关闭连接对于 HTTP 而言会消耗更多的内存与 CPU 资源。 能不能允许通过同一个TCP 连接发出多个请求, 从而减少与多个连接相关的延迟, 解决办法就是连接保持。

对于 HTTP/1.1, 就是尽量地保持客户端的连接, 通过一个连接传送多个 HTTP 请求响应, 对于客户端可以提高 50%以上的响应时间, 对于服务器可以降低资源开销。

Apache通过设置配置文件httpd-default.conf中相关的连接保持参数来开启与控制连接保持功能。

KeepAlive: 决定是否打开连接保持功能, 后面接 OFF 表示关闭, 接 ON 表示打开, 可以根据网站的并发请求量决定是否打开, 即在高并发时打开连接保持功能, 并发量不高时关闭此功能。

KeepAliveTimeout: 表示一次连接多次请求之间的最大间隔时间, 即两次请求之间超过该时间连接就会自动断开, 从而避免客户端占用连接资源。

MaxKeepAliveRequests: 用于设置在一次长连接中可以传输的最大请求数量, 超过此最大请求数量就会断开连接, 最大值的设置决定于网站中网页的内容, 一般设置数量会多于网站中所有的元素。

2.Apache的访问控制

1.客户机地址限制

通过 Require 配置项, 可以根据客户端的主机名或 IP 地址来决定是否允许客户端访问。在 httpd 服务主配置文件的、 、 、 配置段中均可以使用 Require 配置项来控制客户端的访问。 使用 Require 配置项时, 需要设置客户端地址以构成完整的限制策略, 地址形式可以是 IP 地址、 网络地址、 主机名或域名。 当 Require 配置项之后为“all”时, 表示匹配任意地址。 限制策略的格式如下所示。

Require all granted: 允许所有主机访问;

Require all denied: 拒绝所有主机访问;

Require local: 仅允许本地主机访问;

Require [not] host <主机名或域名列表>: 允许或拒绝指定主机或域名访问;

Require [not] ip <IP 地址或网段列表>: 允许或拒绝指定 IP 地址网络访问。

通常情况下, 网站服务器是对所有客户机开放的, 网页文档目录并未做任何限制, 因此使用的是“Require all granted”的策略, 表示允许从任何客户机访问, 策略格式如下所示。

<Directory "/usr/local/httpd/htdocs">
........(省略部分内容)
Require all granted
</Directory>

定义限制策略时, 多个不带“not”的 Require 配置语句之间是“或”的关系, 即任意一条Require 配置语句满足条件均可访问。 若既出现了不带“not”的 Require 配置语句, 又出现了带“not”的 Require 配置语句, 则配置语句之间是“与”的关系, 即同时满足所有 Require 配置语句才能访问。

需要使用“仅允许”的限制策略时, 应使用 Require 配置语句明确设置允许策略, 只允许一部分主机访问。 例如, 若只希望 IP 地址为 192.168.25.1 的主机能够访问, 目录区域应做如下设置。

<Directory "/usr/local/httpd/htdocs">
........(省略部分内容)
Require ip 192.168.25.1
</Directory>

反之, 需要使用“仅拒绝”的限制策略时, 灵活使用 Require 与 Require not 配置语句设置 拒 绝 访 问 策 略 , 仅 禁 止 一 部 分 主 机 访 问 。 在 使 用 not 禁 止 访 问 时 要 将 其 置 于容器中, 并在容器中设置相应的限制策略。 例如, 若只希望禁止来自两个内网网段 192.168.0.0/24 和 192.168.1.0/24 的主机访问, 但允许其他任何主机访
问, 可以使用如下限制策略。

<Directory "/usr/local/httpd/htdocs">
........(省略部分内容)
<RequireAll>
Require all granted
Require not ip 192.168.0.0/24 192.168.1.0/24
</RequireAll>
</Directory>

当未被授权的客户机访问网站目录时, 将会被拒绝访问。

3.用户授权限制

httpd 服务器支持使用摘要认证(Digest) 和基本认证(Basic) 两种方式。 使用摘要认证需要在编译 httpd 之前添加“–enable-auth-digest”选项, 但并不是所有的浏览器都支持摘要认证; 而基本认证是 httpd 服务的基本功能, 不需要预先配置特别的选项。

基于用户的访问控制包含认证( Authentication) 和授权( Authorization) 两个过程。认证是指识别用户身份的过程, 授权是指允许特定用户访问特定目录区域的过程。 下面将以基本认证方式为例, 添加用户授权限制。

3.1创建用户认证数据文件

httpd 的基本认证通过校验用户名、 密码组合来判断是否允许用户访问。 授权访问的用户账号需要事先建立, 并保存在固定的数据文件中。 使用专门的 htpasswd 工具程序, 可以创建授权用户数据文件, 并维护其中的用户账号。

使用 htpasswd 工具时, 必须指定用户数据文件的位置, 添加“-c”选项表示新建立此文件。 例如, 执行以下操作可以新建数据文件/usr/local/httpd/conf/.awspwd, 其中包含一个名为 zhangsan 的用户信息。

[root@localhost bin]# htpasswd -c /usr/local/httpd/conf/.awspwd zhangsan
New password: 
Re-type new password: 
Adding password for user zhangsa
[root@localhost bin]# cat /usr/local/httpd/conf/.awspwd 
zhangsan:$apr1$I4YluMBM$LfR0ogYzWTrh3UiGgGza..

若省略“-c”选项, 则表示指定的用户数据文件已经存在, 用于添加新的用户或修改现有用户的密码。 例如, 需要向.awspwd 数据文件中添加一个新用户 lisi 时, 可以执行以下操作。

[root@localhost bin]# htpasswd  /usr/local/httpd/conf/.awspwd lisi
New password: 
Re-type new password: 
Adding password for user lisi
[root@localhost bin]# cat /usr/local/httpd/conf/.awspwd 
zhangsan:$apr1$I4YluMBM$LfR0ogYzWTrh3UiGgGza..
lisi:$apr1$go0BtC2S$JsT5xJEhjQPih.7tRJNE7.

3.2添加用户授权配置

有了授权用户账号以后, 还需要修改 httpd.conf 配置文件, 在特定的目录区域中添加授权配置, 以启用基本认证并设置允许哪些用户访问。 例如, 若只允许.awspwd 数据文件中的任一用户访问系统, 可以执行以下操作。

[root@localhost bin]# vim /usr/local/httpd/conf/httpd.conf........<Directory "/usr/local/httpd/htdocs">........AuthName "DocumenRoot"AuthType BasicAuthUserFile /usr/local/httpd/conf/.awspwdRequire valid-user</Directory>
[root@localhost bin]# systemctl restart httpd  

在上述配置内容中, 相关配置项的含义如下。

AuthName: 定义受保护的领域名称, 该内容将在浏览器弹出的认证对话框中显示。

AuthType: 设置认证的类型, Basic 表示基本认证。

AuthUserFile: 设置用于保存用户账号、 密码的认证文件路径。

require valid-user: 要求只有认证文件中的合法用户才能访问。 其中, valid-user 表示所有合法用户, 若只授权给单个用户, 可改为指定的用户名(如 zhangsan)。

当访问系统时, 浏览器会首先弹出认证对话框。 只有输入正确的用户名
和密码后才能查看特定目录下的网站资源, 否则将拒绝访问。

4.Apache日志分割

随着网站的访问量越来越大, 默认情况下 Apache 服务器产生的单个日志文件也会越来越大, 如果不对日志进行分割, 那么如果日志文件占用磁盘空间很大的话势必会将整个日志文件删除, 这样也丢失了很多对网站比较宝贵的信息, 而这些日志可以用来进行访问分析、网络安全监察、 网络运行状况监控等。

另外, 如果服务器遇到故障时, 运维人员要打开日志文件进行分析, 打开的过程会消耗很长时间, 也势必会增加处理故障的时间。 因此管理好这些海量的日志对网站的意义很大,我们会将 Apache 的日志进行按每天的日期自动分割。 下面介绍两种方法均可实现。

4.1Apache 自带 rotatelogs 分割工具

首先, 将 Apache 主配置文件 httpd.conf 打开, 配置网站的日志文件转交给 rotatelogs分割处理。

[root@localhost ~]# mkdir /var/log/httpd
[root@localhost ~]# vim /usr/local/httpd/conf/httpd.conf 
.......
ErrorLog "| /usr/local/bin/rotatelogs -l /var/log/httpd/error_%Y%m%d.log 86400"
........
CustomLog "| /usr/local/bin/rotatelogs -l /var/log/httpd/access_%Y%m%d.log 86400" combined
.........
[root@localhost ~]# systemctl restart httpd.service 
[root@localhost ~]# ll /var/log/httpd
总用量 4
-rw-r--r--. 1 root root 1109 1月   3 11:47 error_20240103.log

其中 ErrorLog 行是错误日志, -l 表示使用本地时间代替 GMT 时间作为时间基准。 需要注意的是在一个改变 GMT 偏移量(比如夏令时)的环境中使用-l 会导致不可预料的结果。CustomLog 行是定义访问日志格式, 86400 表示一天, 即每天生成一个新的日志文件。

重启 Apache 服务, 查看日志文件是否已经按日期分割。

4.2使用第三方工具cronolog分割

除了 Apache 自带 rotatelogs 分割工具, 也可使用第三方工具 cronolog 对 Apache 日志进行分割, 具体操作如下所示。

(1) 编译安装 cronolog 工具

[root@localhost ~]# tar zxvf cronolog-1.6.2.tar.gz
[root@localhost ~]# cd cronolog-1.6.2
[root@localhost cronolog-1.6.2]# ./configure
[root@localhost cronolog-1.6.2]# make && make install

(2) 设置 cronolog 工具工具分割 apache 日志

[root@localhost cronolog-1.6.2]# ll /var/log/httpd | grep "www.kgc.com"
lrwxrwxrwx. 1 root root    5 1月   3 12:00 www.kgc.com-error_%Y%m%d.log -> 86400

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/596862.shtml

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

相关文章

fabric学习

1.通过connection连接远程主机&#xff0c;并执行命令 from fabric import connectioncon1 connection.Connection(host10.10.102.198, userroot, port22, connect_kwargs{"password":"HCCloud2022CN"}) con1.run(free -h) 2.上传压缩文件到主机指定目录…

深入理解CRON表达式:时间调度的艺术

&#x1f604; 19年之后由于某些原因断更了三年&#xff0c;23年重新扬帆起航&#xff0c;推出更多优质博文&#xff0c;希望大家多多支持&#xff5e; &#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志 &#x1f390; 个人CSND主页——Mi…

《作家天地》期刊投稿邮箱投稿方式

《作家天地》是国家新闻出版总署批准的正规文学刊物。对各种流派的作品兼收并蓄&#xff0c;力求题材、形式、风格多样化&#xff0c;适用于发表高品质文学学术作品&#xff0c;科研机构的专家学者以及高等院校的师生等。具有原创性的学术理论、工作实践、科研成果和科研课题及…

javascript 常见工具函数(二)

11.数组等分切片&#xff1a; this.newMapList []; for (var i 0; i < this.mapDataList.length; i 2) {this.newMapList.push(this.mapDataList.slice(i, i 2)); } 12.js做奇偶判断&#xff1a; if (this.mapDataList.length ! 0) {this.mapDataList.length % 2 0 ?…

从0到1入门C++编程——03 内存分区、引用、函数高级应用

文章目录 一、内存分区二、引用三、函数的高级应用1.默认参数2.占位参数3.函数重载 一、内存分区 C程序在执行时&#xff0c;会将内存大致分为4个区&#xff0c;分别是代码区、全局区、栈区和堆区。 代码区用来存放函数体和二进制代码&#xff0c;由操作系统进行管理。 全局区…

js统一公共请求处理与常用工具封装

一个完整的前端项目往往会进行一些必要的抽取公用代码进行封装&#xff0c;这里记录js常用工具及统一的公共请求的封装。 一 2017年 第一版web管理后台在用 web后台管理页面用 /*** Created by hua on 2017/8/24.*/ var requestResult{success :0,failure:1,failureMsg:2 }j…

Ubuntu上使用node搭建本地静态http服务器

1.搭建步骤 1.安装Node.js。首先确保你的Ubuntu系统已经安装了Node.js。如果没有安装&#xff0c;可以通过以下命令进行安装&#xff1a; sudo apt-get update sudo apt-get install nodejs #安装nodejs 2.安装npm。npm是Node.js的包管理器&#xff0c;一般会随着Node.js一…

[python]项目中导入外部包

导入外部包是在Python项目中使用外部库或模块。以下是一些导入外部包的常见方法&#xff1a; 使用import语句导入整个外部包&#xff1a; import package_name例如&#xff0c;导入numpy包&#xff1a; import numpy使用import语句给导入的外部包指定别名&#xff1a; impo…

SQL优化:条件提升

前面我们讲解了下分区表,分区表能提升性能,核心原理在于减少了需要加载的数据量。 我们所有的优化思路,基本都出自两个基本点: 以空间换时间;缩小需要处理的数据量。使用索引、物化视图是以空间换时间的典例,分区表,则是缩小需要处理的数据量的典例。 今天我们讲的条件…

Minio部署在服务器上,分享图片等文件提示,签名不对

问题描述: 上传没问题 下载没问题 就是分享有问题,签名有问题 找了很多解释,什么nginx代理问题啊,什么端口问题啊 什么防火墙问题啊 都是扯淡,一点用没有 最后发现,我的分享链接是127.0.0.1的地址,并不是我的服务器本机的地址 我访问图片都是要把ip改了再去访问,但是一开始并没…

HttpSession的使用

1 HttpSession 概述 在 Java Servlet API 中引入 session 机制来跟踪客户的状态。session 指的是在一段时间内&#xff0c;单个客户与 Web 服务器的一连串相关的交互过程。在一个 session 中&#xff0c;客户可能会多次请求访问同一个网页&#xff0c;也有可能请求访问各种不同…

【JavaSE】P1~P32 进制,字节,Java代码规范,常量,变量,运算符

目录 IDEA常用快键键和快捷用法一、需要复习的重难点概念1 进制、字节、DOS操作命令语句进制及转化字节DOS系统命令提示符 2 Java 常用代码规范3 常量及常量的打印4 变量数据类型及取值范围变量的概念和使用数据类型转换ASCII码表&#xff08;128种&#xff09;基本数据类型极其…

显示所有中国城市需要多少个汉字?

显示所有中国城市需要多少个汉字呢&#xff1f; 需要3678个汉字&#xff0c;看看我怎么知道的。 第一步&#xff1a;先找到中国的所有城市的名称 去哪里找到中国的所有城市的名称呢&#xff1f; 进入中国天气网&#xff1a;http://www.weather.com.cn/ 使用 F12 打开浏览器的调…

记 -bash: docker-compose: command not found 的问题解决

docker-compose: command not found 错误表明系统无法找到 docker-compose 命令。这可能是因为 docker-compose 并未正确安装&#xff0c;或者其可执行文件的路径未包含在系统的 PATH 变量中。 以下是我遇到时解决方法&#xff1a; 确保 Docker 和 Docker Compose 已安装&…

Excelize 入选“2023开源创新榜”优秀开源项目

近日&#xff0c;由中国科协科学技术传播中心、中国计算机学会、中国通信学会、中国科学院软件研究所共同主办&#xff0c;CSDN 承办的 2023 开源创新榜专家评审会在国家科技传播中心成功举办。Excelize 电子表格文档开源基础库入选“2023开源创新榜”优秀开源项目。 评审委员…

#CCSP学习心得总结:2023年新收获CCSP云安全认证

源自&#xff1a;张同学 选择CCSP的原因 选择学习CCSP的原因比较简单&#xff0c;公司这几年开始发力布局云原生和云安全的业务&#xff0c;作为云安全相关知识领域的补充渠道&#xff0c;我对比了CCSP和CCSK&#xff0c;最终选择了综合性较高的CCSP。由于我之前已经拿下了CIS…

【MCAL】AUTOSAR架构下PWM模块配置实践

目录 前言 1.MCAL简介 2. PWM模块详解 2.1 PWM模块概念介绍 2.2 PWM依赖的模块 2.3 PWM频率<

SwiftUI 打造一款可收缩的 HStack(二):对齐+ZStack

概览 在上篇 SwiftUI 打造一款可收缩的 HStack(一):“原汤化原食” 博文里,我们讨论了如何用 HStack 自身来实现可收缩的“HStack”。 而在本篇中,我们将尝试利用 SwiftUI 对齐 + ZStack 的方式完成相同的功能。 在本篇博文中,您将学到以下内容: 概览1. SwiftUI 中的对…

商业综合体能源管理系统功能有哪些?能够为企业带来哪些价值?

随着IT行业的迅猛发展&#xff0c;仅仅实现智能控制已无法满足当前绿色低碳发展的要求&#xff0c;随着智能设备的增多&#xff0c;同时也产生了越来越多的信息孤岛。通过信息技术构建能源管理系统&#xff0c;可以实现先进、智能、经济、可行的商业综合体能源管理解决方案。 …

静态网页设计——校园官网(HTML+CSS+JavaScript)

前言 声明&#xff1a;该文章只是做技术分享&#xff0c;若侵权请联系我删除。&#xff01;&#xff01; 使用技术&#xff1a;HTMLCSSJS 主要内容&#xff1a;对学校官网的结构进行模仿&#xff0c;对布局进行模仿。 主要内容 1、首页 首页以多个div对页面进行分割和布局…