Apache服务之配置文件
纸上得来终觉浅,绝知此事要躬行。

1. Apache 目录结构
Apache的配置指令分为两大类
- 核心指令:由核心模块提供的指令,必须包含在httpd.conf文件中,否则Apache无法工作
- 扩展指令:由标准模块和第三方模块提供的指令,用于扩展Apache服务特性
1.1 二进制安装的目录结构
# CentOS6系统自带的Apache服务 /etc/httpd ├── conf │ ├── httpd.conf │ └── magic ├── conf.d │ ├── info.conf │ ├── mod_dnssd.conf │ ├── README │ └── welcome.conf # 默认的欢迎页面 ├── logs -> ../../var/log/httpd # 日志存放路径 ├── modules -> ../../usr/lib64/httpd/modules # 模块加载地址 └── run -> ../../var/run/httpd # 运行路径
# CentOS7通过yum安装的Apache服务 /etc/httpd |-- conf | |-- httpd.conf | |-- httpd.conf.bak | `-- magic |-- conf.d | |-- autoindex.conf | |-- README | |-- userdir.conf | `-- welcome.conf |-- conf.modules.d | |-- 00-base.conf | |-- 00-dav.conf | |-- 00-lua.conf | |-- 00-mpm.conf | |-- 00-proxy.conf | |-- 00-systemd.conf | `-- 01-cgi.conf |-- logs -> ../../var/log/httpd |-- modules -> ../../usr/lib64/httpd/modules `-- run -> /run/httpd
1.2 编译安装的目录结构
- httpd.conf
- 主配置文件
- mime.types
- 用于定义MIME类型,通过这些定义使Apache能通过文件扩展名来控制将那些类型的MIME发送给浏览器
- magic
- mod_mine_magic模块的配置文件
- 当mod_mine_magic无法分辨出正确文件类型时,才由这个文件所定义的类型来提供服务
- extra
- 存放Apache所需要引用的配置
- 在httpd.conf文件中通过Include指令启动或者停用对于功能
- original
- 对于配置文件的原始状态的备份
/etc/httpd24 ├── extra │ ├── httpd-autoindex.conf │ ├── httpd-dav.conf │ ├── httpd-default.conf │ ├── httpd-info.conf │ ├── httpd-languages.conf │ ├── httpd-manual.conf │ ├── httpd-mpm.conf │ ├── httpd-multilang-errordoc.conf │ ├── httpd-ssl.conf │ ├── httpd-userdir.conf │ ├── httpd-vhosts.conf │ └── proxy-html.conf ├── httpd.conf ├── magic ├── mime.types └── original ├── extra │ ├── httpd-autoindex.conf # 自动索引配置 │ ├── httpd-dav.conf # WebDAV配置 │ ├── httpd-default.conf # Apache的默认配置 │ ├── httpd-info.conf # mod_status和mod_info模块配置 │ ├── httpd-languages.conf # 多语言配置支持 │ ├── httpd-manual.conf # 在网站上提供Apache手册 │ ├── httpd-mpm.conf # 多路处理模型配置 │ ├── httpd-multilang-errordoc.conf # 实现多语言的错误信息配置 │ ├── httpd-ssl.conf # SSL配置 │ ├── httpd-userdir.conf # 用户目录配置 │ ├── httpd-vhosts.conf # 虚拟主机配置 │ └── proxy-html.conf # 代理配置 └── httpd.conf
2. httpd.conf文件
httpd.conf文件大致分为三大部分
- 主服务器部分:核心模块提供的指令定义服务器功能和参数
- 容器环境部分:以<容器名>开头且<容器名/>结尾样式的指令封装
- 服务器扩展部分:通过Include指令来加载其他的参数,如虚拟主机的配置
# 主服务器部分 ServerRoot "/usr/local/apache" Listen 12.34.56.78:80 LoadModule cache_module modules/mod_cache.so 1. 容器环境部分 AllowOverride none Require all denied 1. 服务器扩展部分 Include /etc/httpd24/extra/httpd-ssl.conf Include /etc/httpd24/extra/httpd-info.conf
2.1 主服务器部分
2.1.1 ServerName指令
- 功能介绍
- 用于定义Apache默认主机名
- 这个指定在httpd.conf配置文件中默认被注释掉了,需要启用的话,将#删除即可
- 可以使站点名称地址或者**IP地址**,推荐使用完整的IP地址
- 注意事项
- 如果没有使用这个指令来指定默认的主机名,在启动Apache时会提示错误信息
- 报错信息提示没有找到域名,因此只能是用127.0.0.1的地址作为服务器的默认地址,只有本机能访问
- 如果使用站点名称地址,那么Apache会根据host.conf文件来选择是先从本机名称列表/etc/hosts中查找与站点名称对应的IP地址还是向DNS查询站点名称相对应的IP地址
# 站点名称地址 ServerName www.escape.com 1. IP地址 ServerName 12.34.56.78
# host.conf文件说明 [[email protected] ~]# cat /etc/host.conf multi on 1. 1. order是解析顺序的参数 1. order hosts,bind,nis 说明先查询解析/etc/hosts文件,然后DNS,再是NIS 1. 2. multi on 1. 表示是否运行/etc/hosts文件允许主机指定多个多个地址 ,on表示运行 1. 3. nospoof on 1. 是否允许服务器对ip地址进行其欺骗,这里的on表示不允许 1. 4. rccorder 1. 如果被设置为on,那么所有查询将被重新排序
2.1.2 ServerRoot指令
- 功能介绍
- ServerRoot指令用于定义服务器所在的目录
- 这个路径通常是在编译过程中由-prefix=ServerRoot路径选项来指定的,二进制安装一般在/etc/httpd目录
- Apache的根目录包含bin、conf、htdocs等目录文件夹
- 注意事项
- 在启动Apahce服务时可以使用-d参数来指定一个ServerRoot的位置
- 一般是为了测试同一个版本的Apache在多个环境下的配置,生产环境中很少使用
# 编译安装 ServerRoot /usr/local/apache
2.1.3 DocumentRoot指令
- 功能介绍
- DocumentRoot指令用于指定Apache所提供的页面服务的根路径,就是通过URL请求的根目录
- 注意事项
- 此路径不能使用相对路径
- 如果路径中间有空格,需要使用引号括起来
DocumentRoot "/var/www/html"
2.1.4 ServerAdmin指令
- ServerAdmin指令用于定义当服务器出现错误后提示给管理员邮件地址
ServerAdmin [email protected]
2.1.5 Alias与ServerAlias指令
- Alias指令
- 用于实现目录映射功能,识别为CGI脚本目录
- ServerAlias指令
- 用于实现目录映射功能,识别为普通目录而非CGI脚本
# Alias指令 Alias /var/www/html /home/www/html 1. ServerAlias指令 ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
2.1.6 User与Group指令
- User与Group指令用于定义运行Apache服务器的账号和工作组
- 用于定义用户请求时创建的子进程的账号和工作组,以及一些权力范围
# 编译安装 User deamon Group deamon 1. 二进制安装 User apache Group apche
[[email protected] ~]# ps -aux | grep httpd root 22661 0.0 1.2 312464 12072 ? Ss 04:42 0:04 /usr/sbin/httpd -DFOREGROUND apache 22662 0.0 0.7 314680 7404 ? S 04:42 0:00 /usr/sbin/httpd -DFOREGROUND apache 22663 0.0 0.7 314680 7172 ? S 04:42 0:00 /usr/sbin/httpd -DFOREGROUND apache 22664 0.0 0.6 314680 6660 ? S 04:42 0:00 /usr/sbin/httpd -DFOREGROUND ......
2.1.7 Listen指令
- Listen指令用来定义Apache的监听端口号,默认为80端口
- 如果使用了出80外的其他端口,浏览器访问时需要加上端口号,否则无法访问
# 监听在特定IP地址特定端口上 Listen 12.34.56.78:80 1. 监听在所有IP地址的特点端口上 Listen 80 Listen *:80
2.1.8 LoadModule指令
- LoadModule指令用于加载模块或者目标文件
# 加载模块 LoadModule authn_file_module modules/mod_authn_file.so 1. 加载扩展配置文件 Include conf.modules.d/*.conf
2.1.9 ErrorDocument指令
- ErrorDocument指令根据响应码自定义服务器出错时所提供的错误信息页面
- 有三种方法:定义文本信息、实用脚本、制定一个页面
# 定义文本信息 ErrorDocument 500 "The server made a boo boo." 1. 实用脚本 ErrorDocument 404 "/cgi-bin/missing_handler.pl" 1. 制定一个页面 ErrorDocument 404 /missing.html ErrorDocument 402 http://www.example.com/subscription_info.html
2.1.10 Options指令
指令介绍
- Options指令决定在那些目录中使用哪些服务器的特性
指令参数
- None
- 表示Options指令不生效
- ExecCGI
- 允许在当前目录下执行CGI脚本
- Includes
- 允许使用SSI功能,即开启服务器方包含功能
- IncludesNOEXEC
- 允许使用SSI功能,但#exec cmd和#exec cgi功能进制使用
- Indexes
- 开启索引功能
- 一个请求目录的URL中没有设定DirectoryIndex指令指定索引文件,那么服务器会自动返回一个请求目录内容的目录列表,即列出当前目录下所有的文件和目录列表,做下载站可以使用
- FollowSymLinks
- 允许在当前目录中使用符号链接,如目录下有链接文件,会显示出链接文件实际的文件内容
- 如果参数在
容器中则会忽略,而且不会改变用于匹配的 容器的路径
- SymLinksIfOwnerMatch
- 与FollowSymLinks类似,但只有当服务器仅在符号链接与其目录或文件拥有相同的UID时才使用
- 如果参数在
容器中则会忽略
- All
- 使用除MultiViews外的所以特性,是Options指令的默认参数
- MultiViews
- 用于启用mod_negotiaions模块提供的多重视图功能参数,需要配合DefaultLanguage指令使用