Server - Apache - 配置文件基本思路简介
-
概述
- 简单描述 apache 的配置文件里一些思路
-
背景
- 初学 apache
- 学了好几天, 就会了一点点东西
- 就会安装, 启停
- 就把目录搞明白了
- 就部署了一个静态页面
- 就简单配置了下 最基本的 access_log
- 配置文件完全都看不懂
- 要是工作的话, 估计一天都能写配置了
- 谁知道啊...
- 所以先来简单看看, 主配置文件 的一些基本思路吧
- 具体配置项, 可能也讲得不多
-
环境
- 虚拟机 - OS
- VirtualBox6.0
- CentOS7.2
- apache
- 2.4.6-90
- yum 安装
- 宿主机 - OS
- Win10
- 网络
- 虚拟机使用 桥接模式
- 虚拟机 - OS
1. 配置文件
-
概述
- apache 主配置文件
-
路径
# 默认 /etc/httpd/conf/http.conf
2. 思路
-
概述
- apache 配置文件思路
-
思路
-
模块化
- apache 的所有功能, 其实都是交给 各个模块 来实现的
- 设计思路
- 分化了职责
- 让配置更加灵活
- 设计思路
- apache 的所有功能, 其实都是交给 各个模块 来实现的
-
core 模块
- 最基础的模块
- 所有 apache 都会带有的模块
- base 模块
- 默认的 apache 不会只有 一个模块
- status 为 base 的模块, 都会内置在 apache 中
- 这个 status, 可以在 官网的模块说明里, 看到
- 如果官网都没有, 那么肯定就不是 base 了
- 某个base模块
-
模块分类
-
MPM - 多线程处理模块
- 作用
- 处理, 转发请求
- 很重要
- 有且仅有一个
- 作用
-
Base - 基础模块
- 默认
- apache 自带
- 当然你也可以移除
- 默认
-
Extension - 拓展模块
- 拓展
- 默认不带
- 可以想办法引入
- 官网说需要在 编译时 或者 重新编译时 引入
- 不太懂 C, 不知道会不会很麻烦
- 官网说需要在 编译时 或者 重新编译时 引入
- 拓展
-
Experimental - 实验模块
- 实验
- 默认不带
- 你想用得自己引入
- 当然既然是 实验, 肯定会有各种坑
- 实验
-
External - 外部模块
- 外部
- 第三方开发
- 对不起, 官网无法提供支持....
- 外部
-
-
其他
- 文件
- 路径
-
3. 配置文件
-
概述
- 简单描述一下, 默认配置文件的一些思路
-
简化
-
原因
- 原来的配置文件, 注释, 空行太多
- 使用 工具, 简化得出实际生效的内容
-
目录
# 过滤掉 注释 和 空行 > cat httpd.conf | grep -vE '#|^$'
-
结果
- 最后得出一个 60 行左右的配置文件
- 我改动了 日志相关, 所以无法准确估计默认配置文件的行数
- 硬要估计的话, 大概是 57 行吧
- 最后得出一个 60 行左右的配置文件
-
4. 配置项
- 分类
- 大概分为 4 类
1. 直接的配置
-
例子
# 根路径为 /etc/httpd ServerRoot "/etc/httpd" # 监听 80 端口 Listen 80 # 操作用户名 apache User apache # 操作用户组 apache Group apache
-
思路
- core 模块
- 这些都是 core 模块支持的属性
- 起码目前来看, 都是这样, 如果以后遇到了, 会回来调整
- 我才学这玩意一两天, 请见谅...
- 这些都是 core 模块支持的属性
- 配置
- 基本都是 kv 类型的配置
- 键
- 配置项
- 值
- 配置的内容
- 不过好像 路径 得加上双引号
- 键
- 后面其他地方, 出现过 kvv 类的配置
- 现在还没遇到, 遇到以后再说吧
- 基本都是 kv 类型的配置
- core 模块
2. <IfModule <mod_name>>
-
概述
- 模块限定配置
-
例子
# 配置 log_config_module <IfModule log_config_module> # 配置日志格式, 并给出别名 combined LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%h %l %u %t \"%r\" %>s %b" common LogFormat "%t %h %A %p \"%r\" %D %X %I %O %>s" demo # 如果 logio_module 模块存在, 则会生效 <IfModule logio_module> LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio </IfModule> # 配置默认 access_log 格式 CustomLog "logs/access_log" demo </IfModule>
-
思路
-
IfModule <mod_name>
- 如果模块存在, 下面的配置, 才会生效
-
CustomLog "logs/access_log" demo
- kvv 模式
- 制定 log 格式
- 日志文件为 demo 别名对应的格式
- kvv 模式
-
3. <Directory >
-
概述
- 对 目录 做限制
- 老实说, 我并不太清楚
-
例子
# 限定 根目录 <Directory /> # 拒绝修改 AllowOverride None # 拒绝所有访问 Require all denied </Directory>
-
directory
-
作用域限定
- 限定标签内的命令, 只能在 限定的 目录, 子目录 里生效
- 比如上面的, 就是对 根目录 生效
- 限定标签内的命令, 只能在 限定的 目录, 子目录 里生效
-
覆盖的问题
- / 默认的访问权限, 是 允许所有
- 这个显然不科学
- /var/www/html 的权限, 后来改成了 all granted
- 在 \ all denied 的情况下, 开启了特定目录的访问
- / 默认的访问权限, 是 允许所有
-
4. <Files >
-
概述
- 类似 目录 的限制
- 这次的限制, 是针对 特定文件
-
例子
# 限制所有 .ht 文件 <Files ".ht*"> # 拒绝所有访问 Require all denied </Files>
5. 其他
-
配置
- apache 是基于 模块 的服务器
- 所以本质上, 配置的对象, 其实是 服务器, 而不是 模块本身
- 所以说, 模块众多, 也带来了众多的配置
- 一时半会儿, 是讲不完的...
- apache 是基于 模块 的服务器
-
目的
- 这篇文章先有个轮廓
- 大概能知道配置是什么意思
- 以后就算出了问题, 也知道如何查找文档
- 先找模块, 再找文档
- 官方文档的英语, 其实很好懂
- 这篇文章先有个轮廓
ps
-
ref
-
后续
- 尝试做一些 添加模块 的操作
- apache cookbook 这本书, 对新手还真是不太友好...
尽量尝试解释清楚; 自己校对能力有限, 如果有错误欢迎指出