Server - Apache - 配置文件基本思路简介

  1. 概述

    1. 简单描述 apache 的配置文件里一些思路
  2. 背景

    1. 初学 apache
    2. 学了好几天, 就会了一点点东西
      1. 就会安装, 启停
      2. 就把目录搞明白了
      3. 就部署了一个静态页面
      4. 就简单配置了下 最基本的 access_log
      5. 配置文件完全都看不懂
      6. 要是工作的话, 估计一天都能写配置了
        1. 谁知道啊...
    3. 所以先来简单看看, 主配置文件 的一些基本思路吧
      1. 具体配置项, 可能也讲得不多
  3. 环境

    1. 虚拟机 - OS
      1. VirtualBox6.0
      2. CentOS7.2
    2. apache
      1. 2.4.6-90
      2. yum 安装
    3. 宿主机 - OS
      1. Win10
    4. 网络
      1. 虚拟机使用 桥接模式

1. 配置文件

  1. 概述

    1. apache 主配置文件
  2. 路径

    # 默认
    /etc/httpd/conf/http.conf
    

2. 思路

  1. 概述

    1. apache 配置文件思路
  2. 思路

    1. 模块化

      1. apache 的所有功能, 其实都是交给 各个模块 来实现的
        1. 设计思路
          1. 分化了职责
          2. 让配置更加灵活
    2. core 模块

      1. 最基础的模块
      2. 所有 apache 都会带有的模块
      3. base 模块
        1. 默认的 apache 不会只有 一个模块
        2. status 为 base 的模块, 都会内置在 apache 中
          1. 这个 status, 可以在 官网的模块说明里, 看到
          2. 如果官网都没有, 那么肯定就不是 base 了
          3. 某个base模块
    3. 模块分类

      1. MPM - 多线程处理模块

        1. 作用
          1. 处理, 转发请求
        2. 很重要
          1. 有且仅有一个
      2. Base - 基础模块

        1. 默认
          1. apache 自带
          2. 当然你也可以移除
      3. Extension - 拓展模块

        1. 拓展
          1. 默认不带
          2. 可以想办法引入
            1. 官网说需要在 编译时 或者 重新编译时 引入
              1. 不太懂 C, 不知道会不会很麻烦
      4. Experimental - 实验模块

        1. 实验
          1. 默认不带
          2. 你想用得自己引入
          3. 当然既然是 实验, 肯定会有各种坑
      5. External - 外部模块

        1. 外部
          1. 第三方开发
          2. 对不起, 官网无法提供支持....
    4. 其他

      1. 文件
      2. 路径

3. 配置文件

  1. 概述

    1. 简单描述一下, 默认配置文件的一些思路
  2. 简化

    1. 原因

      1. 原来的配置文件, 注释, 空行太多
      2. 使用 工具, 简化得出实际生效的内容
    2. 目录

      # 过滤掉 注释 和 空行
      > cat httpd.conf | grep -vE '#|^$'
      
    3. 结果

      1. 最后得出一个 60 行左右的配置文件
        1. 我改动了 日志相关, 所以无法准确估计默认配置文件的行数
        2. 硬要估计的话, 大概是 57 行吧

4. 配置项

  1. 分类
    1. 大概分为 4 类

1. 直接的配置

  1. 例子

    # 根路径为 /etc/httpd
    ServerRoot "/etc/httpd" 
    # 监听 80 端口
    Listen 80 
    # 操作用户名 apache
    User apache 
    # 操作用户组 apache
    Group apache 
    
  2. 思路

    1. core 模块
      1. 这些都是 core 模块支持的属性
        1. 起码目前来看, 都是这样, 如果以后遇到了, 会回来调整
        2. 我才学这玩意一两天, 请见谅...
    2. 配置
      1. 基本都是 kv 类型的配置
          1. 配置项
          1. 配置的内容
          2. 不过好像 路径 得加上双引号
      2. 后面其他地方, 出现过 kvv 类的配置
        1. 现在还没遇到, 遇到以后再说吧

2. <IfModule <mod_name>>

  1. 概述

    1. 模块限定配置
  2. 例子

    # 配置 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>
    
  3. 思路

    1. IfModule <mod_name>

      1. 如果模块存在, 下面的配置, 才会生效
    2. CustomLog "logs/access_log" demo

      1. kvv 模式
        1. 制定 log 格式
        2. 日志文件为 demo 别名对应的格式

3. <Directory >

  1. 概述

    1. 对 目录 做限制
    2. 老实说, 我并不太清楚
  2. 例子

    # 限定 根目录
    <Directory />
        # 拒绝修改
        AllowOverride None
        # 拒绝所有访问
        Require all denied
    </Directory>
    
  3. directory

    1. 作用域限定

      1. 限定标签内的命令, 只能在 限定的 目录, 子目录 里生效
        1. 比如上面的, 就是对 根目录 生效
    2. 覆盖的问题

      1. / 默认的访问权限, 是 允许所有
        1. 这个显然不科学
      2. /var/www/html 的权限, 后来改成了 all granted
        1. 在 \ all denied 的情况下, 开启了特定目录的访问

4. <Files >

  1. 概述

    1. 类似 目录 的限制
    2. 这次的限制, 是针对 特定文件
  2. 例子

    # 限制所有 .ht 文件
    <Files ".ht*">
        # 拒绝所有访问
        Require all denied
    </Files>
    

5. 其他

  1. 配置

    1. apache 是基于 模块 的服务器
      1. 所以本质上, 配置的对象, 其实是 服务器, 而不是 模块本身
      2. 所以说, 模块众多, 也带来了众多的配置
      3. 一时半会儿, 是讲不完的...
  2. 目的

    1. 这篇文章先有个轮廓
      1. 大概能知道配置是什么意思
      2. 以后就算出了问题, 也知道如何查找文档
        1. 先找模块, 再找文档
        2. 官方文档的英语, 其实很好懂

ps

  1. ref

    1. grep 命令过滤配置文件中的注释和空行
    2. 模块 与 status
    3. Require
  2. 后续

    1. 尝试做一些 添加模块 的操作
    2. apache cookbook 这本书, 对新手还真是不太友好...
posted @ 2020-03-09 15:46  轩辕拾銉  阅读(158)  评论(0编辑  收藏  举报