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

每个请求的配置部分

[<If>]( ), 和部分可用于根据每个请求设置配置 标准。[<ElseIf>]( )``[<Else>]( )

通用表达式解析器

新的表达式解析器允许使用通用语法指定复杂条件 在指令中,例如, 等。[SetEnvIfExpr]( )``[RewriteCond]( )``[Header]( )``[<If>]( )

保持活动超时(以毫秒为单位)

现在可以以毫秒为单位指定。[KeepAliveTimeout]( )

名称虚拟主机指令

不再需要,现已弃用。

覆盖配置

new指令允许更细粒度地控制哪些指令是 允许的文件中。[AllowOverrideList]( )``.htaccess

配置文件变量

现在可以在配置中对变量进行变量,从而可以更清晰地表示 如果在配置中的许多位置使用相同的值。[Define]( )

减少内存使用

尽管有许多新功能,但 2.4.x 使用的内存往往比 2.2.x.

二,新模块

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的配置方式:

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

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

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值