Apache服务深入学习篇(详细介绍)

最全的Linux教程,Linux从入门到精通

======================

  1. linux从入门到精通(第2版)

  2. Linux系统移植

  3. Linux驱动开发入门与实战

  4. LINUX 系统移植 第2版

  5. Linux开源网络全栈详解 从DPDK到OpenFlow

华为18级工程师呕心沥血撰写3000页Linux学习笔记教程

第一份《Linux从入门到精通》466页

====================

内容简介

====

本书是获得了很多读者好评的Linux经典畅销书**《Linux从入门到精通》的第2版**。本书第1版出版后曾经多次印刷,并被51CTO读书频道评为“最受读者喜爱的原创IT技术图书奖”。本书第﹖版以最新的Ubuntu 12.04为版本,循序渐进地向读者介绍了Linux 的基础应用、系统管理、网络应用、娱乐和办公、程序开发、服务器配置、系统安全等。本书附带1张光盘,内容为本书配套多媒体教学视频。另外,本书还为读者提供了大量的Linux学习资料和Ubuntu安装镜像文件,供读者免费下载。

华为18级工程师呕心沥血撰写3000页Linux学习笔记教程

本书适合广大Linux初中级用户、开源软件爱好者和大专院校的学生阅读,同时也非常适合准备从事Linux平台开发的各类人员。

需要《Linux入门到精通》、《linux系统移植》、《Linux驱动开发入门实战》、《Linux开源网络全栈》电子书籍及教程的工程师朋友们劳烦您转发+评论

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以点击这里获取!

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

二,新模块

mod_proxy_fcgi
    快速CGI协议后端mod_proxy
mod_proxy_scgi
    SCGI 协议后端mod_proxy
mod_proxy_express
    提供动态配置的批量反向代理mod_proxy
mod_remoteip
    替换请求的明显客户端远程 IP 地址和主机名 IP 地址列表由代理或负载均衡器通过以下方式提供 请求标头。
mod_heartmonitor, mod_lbmethod_heartbeat
    允许基于负载平衡决策 后端服务器上的活动连接数。mod_proxy_balancer
mod_proxy_html
    以前是第三方模块,它支持修复 HTML 反向代理情况下的链接,其中后端生成 对代理客户端无效的 URL。
mod_sed
    高级替换,允许 以编辑具有 SED 全部功能的响应正文。mod_substitute
mod_auth_form
    启用基于表单的身份验证。
mod_session
    允许使用cookie或 数据库存储。
mod_allowmethods
    新模块限制某些 HTTP 方法而不干扰 身份验证或授权。
mod_lua
    将Lua语言嵌入到httpd中, 用于配置和小型企业逻辑功能。(实验性)
mod_log_debug
    允许在 请求处理。
mod_buffer
    用于缓冲输入和输出滤波器堆栈
mod_data
    将响应正文转换为 RFC2397 数据 URL
mod_ratelimit
    为客户端提供带宽速率限制
mod_request
    提供筛选器来处理和提供 HTTP 请求正文
mod_reflector
    通过输出筛选器堆栈提供请求正文的反射作为响应。
mod_slotmem_shm
    提供基于插槽的共享内存提供程序(即记分板)。
mod_xml2enc
    以前是第三方模块,支持国际化 在基于 libxml2(标记感知)过滤器模块中。
mod_macro(自 2.4.5 起可用)
    在配置文件中提供宏。
mod_proxy_wstunnel(自 2.4.5 起可用)
    支持网络套接字隧道。
mod_authnz_fcgi(自 2.4.10 起可用)
    使 FastCGI 授权方应用程序能够进行身份验证和/或 授权客户端。
mod_http2(自 2.4.17 起可用)
    支持 HTTP/2 传输层。
mod_proxy_http2(自 2.4.19 起可用)
    HTTP/2 协议后端mod_proxy
mod_proxy_hcheck(自 2.4.21 起可用)
    支持对远程代理后端服务器进行独立的动态健康检查。
mod_brotli(自 2.4.26 起可用)
    支持 Brotli 压缩算法。
mod_md(自 2.4.30 起可用)
    支持 ACME 协议以自动执行证书预配。
mod_proxy_uwsgi(自 2.4.30 起可用)
    UWSGI网关模块。mod_proxy
mod_socache_redis(自 2.4.39 起可用)
    支持基于Redis的共享对象缓存提供程序。
mod_systemd(自 2.4.42 起可用)
    系统集成。它允许在与systemd一起使用httpd的服务中。Type=notify

三,模块增强功能

mod_ssl
    mod_ssl现在可以配置为使用 用于检查客户端验证状态的 OCSP 服务器 证书。默认响应程序是可配置的,以及 关于是否选择中指定的响应者的决定 客户端证书本身。
mod_ssl现在还支持 OCSP 装订,其中 服务器主动获取其证书的 OCSP 验证,并且 在握手期间将其传输到客户端。
    mod_ssl现在可以配置为共享 SSL 会话 通过 memcached 在服务器之间传输数据
除了 RSA 和 DSA 之外,现在还支持 EC 密钥。
支持 TLS-SRP(在 2.4.4 及更高版本中可用)。
mod_proxy
    该指令 现在在 AorBlock 中配置最优化,与传统的相比具有显著的性能优势 大量存在的双参数语法。ProxyPassLocationLocationMatch
    用于代理请求的源地址现在可以配置。
    支持后端的 Unix 域套接字(在 2.4.7 中可用 以及后来)。
mod_proxy_balancer
    通过平衡器管理器对平衡器成员进行更多运行时配置更改
    可以在运行时通过平衡器管理器添加其他平衡器成员
    平衡器参数子集的运行时配置
    平衡器成员可以设置为“排出”,以便它们仅响应现有的粘性 会话,允许它们正常脱机。
    重启后,平衡器设置可以保留。
mod_cache
    可以选择插入缓存过滤器 在筛选器链中的给定点,以提供对缓存的精细控制。mod_cache
    mod_cache现在可以缓存 HEAD 请求。
    在可能的情况下,现在可以设置指令 按目录,而不是按服务器。mod_cache
    可以自定义缓存 URL 的基本 URL,以便将 缓存可以共享相同的终结点 URL 前缀。
    mod_cache现在能够提供过时的缓存 后端不可用时的数据(错误 5xx)。
    mod_cache现在可以将命中/未命中/重新验证插入 X 缓存标头。
mod_include
    支持“include”元素中的“onerror”属性, 允许在错误时提供错误文档,而不是默认文档 错误字符串。
    mod_cgi, , , ...mod_includemod_isapi
    将标头转换为环境变量比 之前通过标头缓解一些可能的跨站点脚本攻击 注射。包含无效字符(包括下划线)的标题名称 不再转换为环境变量。环境变量 在 Apache 中有一些关于如何解决破碎遗产的指示 需要此类标头的客户端。(这会影响所有模块 使用这些环境变量。
mod_authz_core授权逻辑容器
    现在可以使用指令指定高级授权逻辑 以及相关的容器指令,例如。Require<RequireAll>
mod_rewrite
    mod_rewrite添加(查询字符串丢弃)和标志 简化常见的重写方案。[QSD][END]RewriteRule
    添加了使用复杂布尔表达式的可能性。RewriteCond
    允许将 SQL 查询用作函数。RewriteMap
mod_ldap, mod_authnz_ldap
    mod_authnz_ldap添加对嵌套组的支持。
    mod_ldap添加,和 处理超时的其他改进。 这对于以下设置特别有用: 有状态防火墙会断开与 LDAP 服务器的空闲连接。LDAPConnectionPoolTTLLDAPTimeout
    mod_ldap添加到日志 使用的 LDAP 工具包提供的调试信息。LDAPLibraryDebug
mod_info
    mod_info现在可以转储预解析的配置 在服务器启动期间到标准输出。
mod_auth_basic
    伪造基本身份验证的新通用机制(在 2.4.5 及更高版本)。

四,程序功能增强

fcgistarter
    新的快速CGI守护程序启动器实用程序
htcacheclean
    现在可以列出当前缓存的 URL,以及可选的元数据 包括。
    允许从 缓存。
    文件大小现在可以四舍五入到给定的块大小,使 大小限制更接近磁盘上的实际大小。
    缓存大小现在可以由索引节点的数量限制,而不是 或除了受文件大小的限制之外 磁盘。
rotatelogs
    现在可以创建指向当前日志文件的链接。
    现在可以调用自定义轮换后脚本。
htpasswd, htdbm
    支持 bcrypt 算法(在 2.4.4 及更高版本中可用)。

五,文档

mod_rewrite
    文档已 重新排列并几乎完全重写,重点是 示例和常见用法,以及向您展示其他时 解决方案更合适。重写 指南现在是一个顶级部分,其中包含更多详细信息和 更好的组织。mod_rewrite
mod_ssl
    文档已经很大 增强,在入门级别提供了更多示例,在 除了之前对技术细节的关注。mod_ssl
缓存指南
    缓存指南已被重写 正确区分 RFC2616 HTTP/1.1 缓存 提供的功能和通用 SOCACHE接口提供的键/值缓存,以及涵盖 机制,如。mod_cachemod_file_cache

六,模块开发人员更改

检查配置挂钩已添加
    添加了一个新的钩子,,它运行 在和钩之间。它也在钩子之前运行 当选项传递到时。钩子 允许模块查看相互依赖的配置指令 值并调整它们,同时消息仍然可以记录到 安慰。因此,用户可以收到配置错误问题的警报 在 corehook 函数重定向之前 控制台输出到错误日志。check_configpre_configopen_logstest_config-thttpdcheck_configopen_logs

添加了表达式解析器
    我们现在有一个通用表达式解析器,其 API 是 暴露在。这是改编自 表达式解析器以前在中实现。            ap_expr.hmod_ssl

授权逻辑容器
    授权模块现在通过以下方式注册为提供程序 ap_register_auth_provider(),以支持高级授权逻辑, 如。<RequireAll>

小对象缓存接口
    标头公开基于提供程序 用于缓存小型数据对象的接口,基于前面的 会话缓存的实现。 使用共享内存循环缓冲区、基于磁盘的 dbm 的提供程序 文件和 memcache 分布式缓存当前是 支持。ap_socache.hmod_ssl

添加了缓存状态挂钩
    该模块现在包含一个 newhook,在缓存时调用 决定变得众所周知。提供默认实现 这会向响应添加一个可选标头。mod_cachecache_statusX-CacheX-Cache-Detail
开发人员文档包含API 更改的详细列表。

apache的主配置文件参数说明

ServerRoot : Apache的主目录

Listen:apache监听的端口号

LoadModule:加载动态模块

User/Group:apache进程执行者

ServerAdmin:服务器返回客户端的错误信息中会包含该邮件地址,所以推荐写邮箱地址

**ServerName:**服务器域名,无需配置

DocumentRoot:网站根目录(apache运行项目的根地址)

DocumentRoot "/usr/local/httpd/htdocs"
<Directory "/usr/local/httpd/htdocs">
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>

Option指令是Apache配置文件中比较常见的指令,该指令可以在Apache服务器核心配置(server config)、虚拟主机配置(virtual host)、特定目录配置(directory)以及.htaccess文件中使用,该指令主要作用是控制特定目录启动哪些服务器特性

Options +Indexes:加上该指令可以在网页上查看项目某个目录下的所有文件,例如访问/index 等同访问 index.php或index.html

Options +FollowSymLinks:服务器允许在此目录中使用符号链接。如果该配置项位于配置段中,将会被忽略掉

Options +All:默认设置,开启除MultiViews之外的特性

Options +None:不启动任何服务器特性

Options +ExceCGI:允许使用mod_cgi木块执行CGI脚本

Options +MultiViews:允许使用mod_negotiation模块提供内容协商的“多重视图”,即自动选择最匹配客户端要求的文件

Options +SymLInksIfOwnerMatch:只有当符号连接和符号连接指向的目标文件或目录的所有者是同一用户时,才会使用符号连接。如果该配置选项位于配置段中,将会被忽略

Options +includes:允许使用mod_include模块提供的服务器端包含功能

**“+”**的选项将强制覆盖当前的可选项设置

**“-”**的选项将强制从当前可选项设置中除去

Allow from all

Require all granted :允许所有有权限的人访问apache的运行目录

AllowOverride None/all:禁止(允许)用户对目录配置文件(.htaccess)修改,不建议开启

Order allow,deny:apache会按照Order中的最后一条规则为准,如果allow all 但是deny 某个ip,最后会deny 某个ip

容器作用于模块,如果该模块载入的话就会执行里面的内容

DirectoryIndex index.html index.php :#优先级从左往右一次递减(会优先访问index.html)

**:**提供基于文件名的访问控制. 该段将根据他们在配置文件中出现的顺序被处理:在段和.htaccess文件被处理之后,但是在段之前,能嵌入到段中来限制作用的文件范围。也可以用于.htaccess文件中,允许用户在文件层面上控制对文件的访问

ErrorLog "logs/error_log"

上面一行是错误日志的存放位置

下面一行是分割日志的操作

LogLevel warn

LogLevel :用于调整记录在错误日志中的信息的详细程度:

emerg:紧急(系统无法使用)

alert:必须立即采取措施

crit:致命情况

error:错误情况

warn:警告情况

notice:一般重要情况

info:普通信息

debug:调试信息

#当指定了某个级别的时候,高于它级别的信息会被记录

httpd中httpd-vhosts.conf配置文件的参数说明

<VirtualHost *:80>
    ServerAdmin webmaster@dummy-host2.example.com
    DocumentRoot "/usr/local/httpd/docs/dummy-host2.example.com"
    ServerName dummy-host2.example.com
    ErrorLog "logs/dummy-host2.example.com-error_log"
    CustomLog "logs/dummy-host2.example.com-access_log" common
</VirtualHost>

ServerAdmin:网页管理员的邮箱或者联系方式

DocumentRoot:设置网站的存放位置

ServerName:配置网站的虚拟域名

ErrorLog:配置错误文件的存放位置和名称

CustomLog:设置访问日志的存放位置和名称

Apache 的三种工作模式(Prefork、Worker、Event)

Web服务器Apache目前一共有三种稳定的MPM(Multi-Processing Module,多进程处理模块)模式。

它们分别是prefork,worker、event,它们同时也代表这Apache的演变和发展。

如何查看我们的Apache的工作模式呢?可以使用httpd -V 命令查看,如我安装的Apache 2.4版本呢?

[root@localhost ~]# httpd -V
AH00112: Warning: DocumentRoot [/usr/local/httpd/docs/dummy-host2.example.com] does not exist
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain. Set the 'ServerName' directive globally to suppress this message
Server version: Apache/2.4.25 (Unix)
Server built:   Dec  6 2022 03:33:00
Server's Module Magic Number: 20120211:67
Server loaded:  APR 1.5.2, APR-UTIL 1.5.4
Compiled using: APR 1.5.2, APR-UTIL 1.5.4
Architecture:   64-bit
Server MPM:     event
  threaded:     yes (fixed thread count)
    forked:     yes (variable process count)

这里使用的是event模式,在apache的早期版本2.0默认prefork,2.2版本是worker,2.4版本是event

在configure配置编译参数的时候,可以使用--with-mpm=prefork|worker|event 来指定编译为那一种MPM,当然也可以用编译为三种都支持:--enable-mpms-shared=all,这样在编译的时候会在modules目录下自动编译出三个MPM文件的so,然后通过修改httpd.conf配置文件更改MPM

1、Prefork MPM

Prefork MPM实现了一个非线程的、预派生的web服务器。它在Apache启动之初,就先预派生一些子进程,然后等待连接;可以减少频繁创建和销毁进程的开销,每个子进程只有一个线程,在一个时间点内,只能处理一个请求。这是一个成熟稳定,可以兼容新老模块,也不需要担心线程安全问题,但是一个进程相对占用资源,消耗大量内存,不擅长处理高并发的场景。

如何配置在Apache的配置文件httpd.conf的配置方式:

<IfModule mpm_prefork_module> 
    StartServers 5 
    MinSpareServers 5 
    MaxSpareServers 10 
    MaxRequestWorkers 250 
    MaxConnectionsPerChild 1000 
</IfModule> 

StartServers    服务器启动时建立的子进程数量,prefork默认是5,

MinSpareServers   空闲子进程的最小数量,默认5;如果当前空闲子进程数少于

MinSpareServers ,那么Apache将以最大每秒一个的速度产生新的子进程。此参数不要设的太大。

MaxSpareServers    空闲子进程的最大数量,默认10;如果当前有超过MaxSpareServers数量的空闲子进程,那么父进程会杀死多余的子进程。次参数也不需要设置太大,如果你将其设置比MinSpareServers 小,Apache会自动将其修改为MinSpareServers +1的数量。

MaxRequestWorkers   限定服务器同一时间内客户端最大接入的请求数量,默认是256;任何超过了MaxRequestWorkers限制的请求都要进入等待队列,一旦一个个连接被释放,队列中的请求才将得到服务,如果要增大这个数值,必须先增大ServerLimit。在Apache2.3.1版本之前这参数MaxRequestWorkers被称为MaxClients

MaxConnectionsPerChild   每个子进程在其生命周期内允许最大的请求数量,如果请求总数已经达到这个数值,子进程将会结束,如果设置为0,子进程将永远不会结束。Apache2.3.9之前称之为MaxRequestsPerChild

这里建议设置为非零,注意原因:

1)能够防止(偶然的)内存泄漏无限进行,从而耗尽内存。

2)给进程一个有限寿命,从而有助于当服务器负载减轻的时候减少活动进程的数量(重生的机会)。

2、Worker MPM

和prefork模式相比,worker使用了多进程和多线程的混合模式,worker模式也同样会先预派生一些子进程,然后每个子进程创建一些线程,同时包括一个监听线程,每个请求过来会被分配到一个线程来服务。线程比起进程会更轻量,因为线程是通过共享父进程的内存空间,因此,内存的占用会减少一些,在高并发的场景下会比prefork有更多可用的线程,表现会更优秀一些;另外,如果一个线程出现了问题也会导致同一进程下的线程出现问题,如果是多个线程出现问题,也只是影响Apache的一部分,而不是全部。由于用到多进程多线程,需要考虑到线程的安全了,在使用keep-alive长连接的时候,某个线程会一直被占用,即使中间没有请求,需要等待到超时才会被释放(该问题在prefork模式下也存在)。

如何配置在Apache的配置文件httpd.conf的配置方式:

<IfModule mpm_worker_module> 
    StartServers 3 
    ServerLimit 16 
    MinSpareThreads 75 
    MaxSpareThreads 250 
    ThreadsPerChild 25 
    MaxRequestWorkers 400 
    MaxConnectionsPerChild 1000 
</IfModule> 

配置参数解释:

StartServers   服务器启动时建立的子进程数量,在workers模式下默认是3.

ServerLimit   系统配置的最大进程数量,默认不显示,自己添加上

MinSpareThreads   空闲子进程的最小数量,默认75

MaxSpareThreads    空闲子进程的最大数量,默认250

ThreadsPerChild    每个子进程产生的线程数量,默认是64

MaxRequestWorkers / MaxClients   限定服务器同一时间内客户端最大接入的请求数量.

MaxConnectionsPerChild   每个子进程在其生命周期内允许最大的请求数量,如果请求总数已经达到这个数值,子进程将会结束,如果设置为0,子进程将永远不会结束。在Apache2.3.9之前称之为MaxRequestsPerChild

这里建议设置为非零,注意原因:

1)能够防止(偶然的)内存泄漏无限进行,从而耗尽内存;

2)给进程一个有限寿命,从而有助于当服务器负载减轻的时候减少活动进程的数量(重生的机会)。

Worker模式下所能同时处理的请求总数是由子进程总数乘以ThreadsPerChild值决定的,应该大于等于MaxRequestWorkers

如果负载很大,现有的子进程数不能满足时,控制进程会派生新的子进程。默认ServerLimit最大的子进程总数是16,加大时也需要显式声明ServerLimit(最大值是20000)。

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前在阿里

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Linux运维全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上运维知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化的资料的朋友,可以点击这里获取!

自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前在阿里**

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Linux运维全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
[外链图片转存中…(img-d0H2tPY0-1715701697132)]
[外链图片转存中…(img-kEUsNU6U-1715701697133)]
[外链图片转存中…(img-eAoLyZVd-1715701697133)]
[外链图片转存中…(img-HAu8BPXL-1715701697133)]
[外链图片转存中…(img-QnJPeCqH-1715701697134)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上运维知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化的资料的朋友,可以点击这里获取!

  • 25
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值