常用基础 - 配置文件

  • 作者:KK

  • 发表日期:2017.2.11


  • 注意,本文章并不是介绍具体的配置功能

Apache的配置文件是符合我在文章里《自觉经验分享 - 阅读软件配置》总结到的经验的。

重要知识点

  1. 首先要认识到的一点就是Apache的配置文件默认是conf目录里的httpd.conf,其它配置文件暂时都可以无视掉,其中conf目录就是配置文件目录


  2. Apache的配置语法主要由指令参数两部分组成一个配置行为,一个一个,不能一行多个,比如Listen 80中Listen就是指令,80就是参数,告诉Apache服务器监听80端口


  3. 有些指令可以重复出现

    Listen 80
    Listen 8080
    Listen 65533
    

    这就是三个Listen指令,要求监听3个端口


  4. 指令的参数可以有多个

    以下DirectoryIndex指令是用于设定目录索引文件(使用优先级从左到右),并且指定了多个索引文件,通过空格隔开多个参数的方式来表达

    DirectoryIndex index.html index.php index.htm l.php
    

  5. 有些带有<>包住的叫做配置段

    下面这个是IfModule配置段

    <IfModule dir_module>
    	DirectoryIndex index.html index.php index.htm l.php
    		
    	#下面这个是我随便加的
    	Require all denied
    </IfModule>
    

    IfModule配置段用于判断有没有指定的模块,以上代码就是判断有没有“dir_module”模块,如果有,那就执行里面的指令

    因为判断成功后,里面可能会执行多条指令,所以用了XML的语法来将要囊括的东西包在里面,其实挺好理解的

    另外还能在默认的配置文件里能找到还有<Directory><Files><FilesMatch><Location><VirtualHost>等其它配置段,里面都有一些各色各样的指令


  6. 每一行开头写个#号代表配置内容的注释,不一定是第一个字符

    #监听8991端口
    Listen 8991
    #Listen 8999 此行被注释,无效
    	#缩进后再注释也行,只有#号前面除了空的东西没别的字符
    

配置文件可以像编程语言一样include其他配置

就是用Include指令来实现的:

Include conf/my.conf

Include的路径可以是绝对路径或相对路径,如果用相对路径的话,就是相对于软件目录作为开始位置

  • 支持通配符

引入confconf/vhosts目录下的所有文件
Include conf/vhosts/*


引入confconf/vhosts目录下所有后缀为
Include conf/vhosts/*.conf


好了不解释了不解释了
Include conf/vhosts/xxxx*.conf

  • 任何配置都可以写各种指令

    不要以为被Include的配置文件只能做哪些事情,它们也书写做任何httpd.conf能写的指令

    主要就是看你如何把各种配置分门别类,哪个配置负责哪些指令,自己安排吧


  • 通常httpd.conf的Include指令都放在接近文件底部的地方


读配置文件就从conf/httpd.conf开始

先不要被conf目录下存在的几个文件迷惑(感觉很多东西,不好掌握的样子),单刀直入先从httpd.conf开始阅读配置,因为它是默认的主配置文件(编译时另外可以指定主配置文件)

刚下载安装的Apache还好说,应该没多少文件的,但如果是入职了一个新公司或接触到一个新项目自带的配置,文件又多,那就更加要淡定,从httpd.conf开始

然后你先用编辑器的正则搜索模式^Include找找里面的所有用了Include命令的地方,看看都涉及了哪些配置

再进入这些配置又找找它们有没有Include别的配置,最后做做笔记,就清楚从httpd.conf开始一共是涉及了哪些配置文件了

而没有被Include的文件可能都是一些备用配置,不用管它,对软件运作不会产生影响!


重启Apache才能让配置生效


mime.types是被TypesConfig指令指定加载的

conf目录下还有个mime.types文件,它有点特殊所以不是被Include的,作为http服务器肯定要定义一些关于mime type的处理规则嘛


执行httpd -t命令来检测配置文件是否存在语法错误

如果没错会输出Syntax OK

如果出错会显示相关的配置行号和错误提示


冷知识

  • 指令名称区不分大小写

  • 不是所有指令都能写在不同的配置段中

    其实一般也没人随便这么做,触犯这个规则的人很少

    要查询你想要用的指令可以放在什么配置段里面,后面再专门讲这个吧