Apache服务之配置文件


纸上得来终觉浅,绝知此事要躬行。

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


# 容器环境部分

    AllowOverride none
    Require all denied



# 服务器扩展部分
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

# IP地址
ServerName 12.34.56.78
# host.conf文件说明
[root@MiWiFi-R3-srv ~]# cat /etc/host.conf
multi on

# 1. order是解析顺序的参数
# order hosts,bind,nis  说明先查询解析/etc/hosts文件,然后DNS,再是NIS

# 2. multi on
# 表示是否运行/etc/hosts文件允许主机指定多个多个地址 ,on表示运行

# 3. nospoof on
# 是否允许服务器对ip地址进行其欺骗,这里的on表示不允许

# 4. rccorder
# 如果被设置为on,那么所有查询将被重新排序

2.1.2 ServerRoot指令

  • 功能介绍
    • ServerRoot指令用于定义服务器所在的目录
    • 这个路径通常是在编译过程中由-prefix=ServerRoot路径选项来指定的,二进制安装一般在/etc/httpd目录
    • Apache的根目录包含binconfhtdocs等目录文件夹
  • 注意事项
    • 在启动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 AliasServerAlias指令

  • Alias指令
    • 用于实现目录映射功能,识别为CGI脚本目录
  • ServerAlias指令
    • 用于实现目录映射功能,识别为普通目录而非CGI脚本
# Alias指令
Alias /var/www/html /home/www/html

# ServerAlias指令
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"

2.1.6 UserGroup指令

  • UserGroup指令用于定义运行Apache服务器的账号和工作组
  • 用于定义用户请求时创建的子进程的账号和工作组,以及一些权力范围
# 编译安装
User deamon
Group deamon

# 二进制安装
User apache
Group apche
[root@MiWiFi-R3-srv ~]# 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

# 监听在所有IP地址的特点端口上
Listen 80
Listen *:80

2.1.8 LoadModule指令

  • LoadModule指令用于加载模块或者目标文件
# 加载模块
LoadModule authn_file_module modules/mod_authn_file.so

# 加载扩展配置文件
Include conf.modules.d/*.conf

2.1.9 ErrorDocument指令

  • ErrorDocument指令根据响应码自定义服务器出错时所提供的错误信息页面
  • 有三种方法:定义文本信息、实用脚本、制定一个页面
# 定义文本信息
ErrorDocument 500 "The server made a boo boo."

# 实用脚本
ErrorDocument 404 "/cgi-bin/missing_handler.pl"

# 制定一个页面
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
    • 允许在当前目录中使用符号链接,如目录下有链接文件,会显示出链接文件实际的文件内容
    • 如果参数在<Location>容器中则会忽略,而且不会改变用于匹配的<Directory>容器的路径
  • SymLinksIfOwnerMatch
    • FollowSymLinks类似,但只有当服务器仅在符号链接与其目录或文件拥有相同的UID时才使用
    • 如果参数在<Location>容器中则会忽略
  • All
    • 使用除MultiViews外的所以特性,是Options指令的默认参数
  • MultiViews
    • 用于启用mod_negotiaions模块提供的多重视图功能参数,需要配合DefaultLanguage指令使用

    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted



    Options Indexes FollowSymLinks
    AllowOverride +MultiViews -FollowSymLinks
    Require all granted


2.2 容器环境部分

2.2.1 ifModule容器

  • <ifModule>容器作用于模块
  • 首先判断模式是否被加载,然后在决定是否进行处理,如果为真则执行,否则不执行
  • 容器可以相互嵌套使用,不受影响
# 如果mpm_prefork_module被载入,则加载CGI中的mod_cgi模块

    LoadModule cgi_module modules/mod_cgi.so



# 如果mpm_prefork_module没有被载入,则加载CGI中的mod_cgid模块

    LoadModule cgid_module modules/mod_cgid.so


2.2.2 ifDefine容器

  • <ifDefine>容器与<ifModule>容器类似,都是用于进行条件判断
  • <ifDefine>容器需要条件为真才执行,而且需要在httpd启动时指定特定的参数才能起作用
# 容器配置

    LoadModule proxy_module modules/libproxy.so


# 启动命令指定才起作用
$ httpd -D Proxy

2.2.3DirectoryDirectoryMatch容器

  • <Directory>容器
    • 用于让它所封装的指令在指定的目录和子目录中起作用,目录必须是完整路径
    • 目录路径中可以使用通配符,*?[]
    • 使用通配符需要在目录路径前加上~标识
  • <DirectoryMatch>容器
    • <Directory>容器类似,可以直接接受正则表达式,无需添加~标识
# 正常目录路径

    AllowOverride None
    Require all granted


# 加入正则表达式,匹配apache00-apche99目录下的html目录

    AllowOverride None
    Require all granted



    AllowOverride None
    Require all granted


2.2.4FilesFilesMatch容器

  • <Files>容器
    • <Directory>容器用于目录,<Files>容器用于文件
    • 目录路径中可以使用通配符,*?[]
    • 使用通配符需要在目录路径前加上~标识
  • <FilesMatch>容器
    • <Files>容器类似,可以直接接受正则表达式,无需添加~标识
# 容器

    AllowOverride None
    Require all granted


# 容器

    AllowOverride None
    Require all granted


2.2.5LocationLocationMatch容器

  • <Location><LocationMatch>容器用于对URL进行访问控制
  • <Location>容器还可以将URL请求映射到Apache模块处理器上,如mod_status模块
# 将限制所以以/cgi开头的URL拒绝访问

    Order deny,allow
    Deny from all


# 限制mod_status模块

    SetHandler server-status
    Order deny,allow
    Deny from all
    Allow from all
    Allow from .example.com


2.2.5 LimitLimitExcept容器

  • 用于对用户请求进行一些限制
# 对http协议进行限制

    Require valid-user




    Require valid-user


2.3 服务器扩展部分

2.3.1 自带扩展模块

  • 编译和httpd2.4之后的程序都是用这种分割式配置文件的形式,方便修改和使用
  • 如果有需要可以自定义指定需要配置的内容,在httpd.conf文件中进行引入,即可使用
序号 配置文件名称 用途
1 httpd-autoindex.conf 自动索引配置
2 httpd-dav.conf WebDAV配置
3 httpd-default.conf Apache的默认配置
4 httpd-info.conf mod_statusmod_info模块配置
5 httpd-languages.conf 多语言配置支持
6 httpd-manual.conf 在网站上提供Apache手册
7 httpd-multilang-errordoc.conf 实现多语言的错误信息配置
8 httpd-ssl.conf SSL配置
9 httpd-userdir.conf 用户目录配置
10 httpd-vhosts.conf 虚拟主机配置
11 proxy-html.conf 代理配置

2.3.2 引入扩展模块

# 二进制安装
Include conf.d/*.conf
Include conf.modules.d/*.conf

# 编译安装
Include /etc/httpd24/extra/httpd-mpm.conf
Include /etc/httpd24/extra/httpd-multilang-errordoc.conf
Include /etc/httpd24/extra/httpd-autoindex.conf

3. .htaccess文件

Apache中,通常都是使用httpd.conf文件对服务器进行配置,但是对于一些管理员来说,可以使用.htaccess文件对目录进行更简单、更精细的配置。

好处

  • 随时对目录功能和权限进行控制
  • 输入.htaccess文件的配置无需重启Apache服务就能生效

坏处

  • 会导致服务器性能急剧下降
  • 安全问题,导致服务器难以配置

总结

  • 所以在Apache中不建议使用.htaccess文件,如果非要是用的话,应在httpd.conf<Directory>容器中使用AllowOverride指令来开启,这样能够有效的降低服务器的性能损失。

注意事项

  • 使用.htaccess文件需要先开启AllowOverride功能,默认是关闭的
  • 只需要在指定的目录下,创建一个.htaccess文件就可以使用.htaccess功能了

3.1 AllowOverride指令

使用AllowOverride指令就是配置,让.htaccess文件支持哪些指令

参数选项

  • None
    • 进制使用.htaccess文件功能
  • All
    • 使用所有能在.htaccess文件中使用的指令
  • AuthConfig
    • 使用鉴权指令,如AuthNameAuthType
  • FileInfo
    • 使用控制文件类型的指令,如ErrorDocumentSetOutputFilter
  • Indexes
    • 使用目录索引指令
  • Options
    • 使用控制目录功能指令
  • Limit
    • 使用主机访问控制指令
# 启动.htaccess文件功能,并让.htaccess文件支持目录所以指令
AllowOverride Indexes

# /var/www/escape目录下.htaccess文件的内容,让其支持CGI
Options ExecCGI
AddHandler cig-script cgi pl

3.2 映射用户到目录

实现在一台服务器上为多个用户提供他们自己的Web站点

  • 实现步骤
# 【第一步】httpd.conf中加载mod_userdir模块
LoadModule mod_userdir modules/mod_userdir.so
# 【第二步】启用编译安装的httpd-userdir.conf文件
# 默认模板的作用就是将用户的请求映射到用户的public_html目录
# 在这个目录中启用.htaccess文件支持,并对所有链接进行访问控制,只允许GET、POST、OPTIONS方法进行访问
[root@MiWiFi-R3-srv extra]# cat httpd-userdir.conf
UserDir public_html

    AllowOverride FileInfo AuthConfig Limit Indexes
    Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
    Require method GET POST OPTIONS

# 【第三步】赋权限、重启
$ chmod 755 -R /home/escape
$ echo "

text

" > /home/escape/public_html/index.html $ ./apachectl restart
# 【第四步】访问用户站点
http://192.168.31.94/~escape

3.3 目录的索引

为网站自动添加索引功能,实现网站http://www.escape.com自动匹配http://www.escape.com/index.html

所需模块

  • 需要使用mod_dirmod_autoindex模块实现服务器的索引支持

提供两种索引方式

  • mod_dir模块提供
    • 一是由用户编写一个索引文件,通常为index.htmlindex.php文件
  • mod_autoindex模块提供
    • 二是在mod_dir模块指定的索引没有找到时,由Apache服务器生成一个目录列表,完成目录的索引,如下载站
# mod_dir模块提供DirectoryIndex指令指定
DirectoryIndex index.html index.php

# 也可以使用绝对路径来指定
DirectoryIndex /cig-bin/index.cgi

# mod_autoindex模块
Include conf/extra/httpd-autoindex.conf
# httpd-autoindex.conf有大量配置可供选择

4. 使用GUI进行服务配置

介绍几种GUI界面的配置工具,其底层还是通过修改配置文件进行完成的。

4.1 Webmin

介绍

  • 最强大的基于Web页面的Linux系统管理工具

安装

# 下载、解压
$ wget https://sourceforge.net/projects/webadmin/files/webmin/1.860/webmin-1.860.tar.gz/download?use_mirror=nchc
$ tar -xf webmin-1.860 -C /usr/share/
$ cd /usr/share/webmin-1.860

# 安装,如下图配置
$ ./setup.sh

# 启动
http://192.168.31.94:10000

4.2 Zecos ApacheConf

介绍

  • 最强大的基于Web页面的Windos系统管理工具

安装

  • 官网下载安装  http://www.apache-gui.com

4.3 redhat-config-httpd

介绍

  • 红帽的Apache配置程序

安装

  • yum install redhat-config-httpd

文章作者: Escape
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Escape !
  目录