青蛙学Linux—Apache配置文件

时间:2024-02-22 13:20:53

1、主配置文件httpd.conf

Apache的主配置文件httpd.conf位于Apache安装目录下的conf目录中,是Apache的全局配置文件,配置Apache的端口、启用模块等一些全局的配置,并且可通过Include引用conf/extra目录下的子配置文件以减小配置文件的复杂程度。

httpd.conf是一个包含若干指令的纯文本文件,配置文件的每一行包含一个指令,指令不区分大小写,但是指令的参数大小写敏感,以#开头的行为注释,注意,注释不能出现在指令后面。

httpd.conf中的常用配置

守护进程及监听端口
ServerRoot "/usr/local/httpd"   # 指定守护进程httpd的运行目录,httpd在启动之后自动将进程切换到该目录
Listen 80                       # 指定Apache监听的端口,如需监听多个端口则使用多个Listen指令
Apache加载模块
# 指定Apache加载的模块,模块位于安装目录下的modules目录下
LoadModule authn_file_module modules/mod_authn_file.so
#LoadModule authn_dbm_module modules/mod_authn_dbm.so
...
Apache运行的用户和组
User daemon   # 指定运行Apache的用户
Group daemon  # 指定运行Apache的组
网站管理员电子邮件和主机名
ServerAdmin you@example.com    # 指定网站管理员的电子邮件,如果Apache运行出现问题,会向该邮箱发送邮件
#ServerName www.example.com:80 # 指定系统主机名,如果未指定则使用系统的hostname,这里设置的主机名必须能正确解析到对应的IP地址
目录访问权限控制
<Directory />
    AllowOverride none
    Require all denied
</Directory>

以上是httpd.conf中对于Apache根目录的权限设置,<Directory 路径></Directory>标签用于设置指定目录的访问权限,标签中可使用以下指令:

  • Options:在目录中能够执行的操作,主要有以下几个参数

All - 除MultiViews之外的所有特性,是Options指令的默认值
None - 不启用任何的服务器特性
FollowSymLinks - 允许在此目录中使用符号链接,如果该配置选项位于<Location>配置段中,将会被忽略
Indexes - 如果输入的网址对应服务器上的一个文件目录,而此目录中又没有DirectoryIndex指令,那么服务器会返回由mod_autoindex模块生成的一个格式化后的目录列表
MultiViews - 允许使用mod_negotiation模块提供内容协商的"多重视图"。简而言之,如果客户端请求的路径可能对应多种类型的文件,那么服务器将根据客户端请求的具体情况自动选择一个最匹配客户端要求的文件
SymLinksIfOwnerMatch - 仅在符号连接与目标文件或目录的所有者具有相同的用户ID时才使用它。简而言之,只有当符号连接和符号连接指向的目标文件或目录的所有者是同一用户时,才会使用符号连接。如果该配置选项位于<Location>配置段中,将会被忽略
ExecCGI - 允许使用mod_cgi模块执行CGI脚本
Includes - 允许使用mod_include模块提供的服务器端包含功能
IncludesNOEXEC - 允许服务器端包含,但禁用"#exec cmd"和"#exec cgi"。但仍可以从ScriptAlias目录使用"#include virtual"虚拟CGI脚本

  • AllowOverride:设定是否使用目录中的.htaccess文件来控制权限,有以下两个参数

All - 使用.htaccess文件来控制权限

None - 不使用.htaccess文件控制权限,由httpd.conf统一控制

  • Require:允许或拒绝列表,使用方法如下

Require all granted - 允许所有的访问

Require all denied - 拒绝所有访问

Require ip - 允许指定的IP访问,多个IP间用空格隔开

Require not ip - 拒绝指定的IP访问

Reuquire host - 允许指定的主机访问,多个主机间用空格隔开

Reuquire not host - 拒绝指定的主机访问

以上单条规则可直接写在<Directory ></Directory>标签中,如果需要多条规则,则需要使用以下标签包裹:

<RequireAll></RequireAll> - 拒绝规则优先执行

<RequireAny></RequireAny> - 允许规则优先执行

网站路径及首页
DocumentRoot "/usr/local/httpd/htdocs"    # 指定网站的根目录
DirectoryIndex index.html                 # 指定网站默认首页
日志记录
ErrorLog "logs/error_log"                      # 错误日志
LogLevel warn                                  # 记录等级
LogFormat "%h %l %u %t \"%r\" %>s %b" common   # 日志格式
CustomLog "logs/access_log" common             # 访问日志,引用了上面的日志格式
引入子配置文件
# Server-pool management (MPM specific)
#Include conf/extra/httpd-mpm.conf

# Multi-language error messages
#Include conf/extra/httpd-multilang-errordoc.conf
...

2、子配置文件httpd-default.conf

httpd-default.conf用于对Apache进行一些缺省配置。如需启用该配置文件,则将httpd.conf中的如下内容取消注释:

#Include conf/extra/httpd-default.conf

httpd-default.conf中的常用配置

Timeout 60    # 连接超时时间,单位为秒
KeepAlive On  # 建立与用户的永久连接,On为打开,Off为关闭;在包含很多图片、CSS、JS内容的静态网页中建议设置为ON,动态网页设置为Off
MaxKeepAliveRequests 100  # 定义一个TCP连接可以进行HTTP请求的最大次数,0为不限次数,当KeepAlive为On时生效
KeepAliveTimeout 5        # 定义一次连接中最后一次请求完成后的等待超时时间
AccessFileName .htaccess  # 定义权限控制文件的文件名
ServerSignature Off       # 打开错误页面时是否显示Apache版本号,On为显示,Off为不显示,为了安全建议设置为Off
HostnameLookups Off       # 使用DNS查询客户端地址,建议设置为Off关闭,打开非常消耗资源
如何显示Apache版本号的设置
ServerTokens Full
# 定义如何显示Apache的版本号,该指令可以使用以下参数(显示内容从简单到详细)
# Prod    - 将显示类似“Server:Apache”
# Major   - 将显示类似“Server:Apache/2”
# Minor   - 将显示类似“Server: Apache/2.4”
# Minimal - 将显示类似“Server: Apache/2.4.29”
# OS      - 将显示类似“Server: Apache/2.4.29 (Unix)”
# Full    - 将显示类似“Server: Apache/2.4.29 (Unix) OpenSSL/1.0.1e-fips PHP/7.1.14”

3、子配置文件httpd-info.conf

httpd-info.conf用于配置Apache的状态页,通过状态页可以查看Apache的运行状态、资源占用、服务器信息等。如需启用该配置文件,则将httpd.conf中的如下内容取消注释:

#Include conf/extra/httpd-info.conf

该配置文件非常简单,内容如下(仅展示关键内容):

# 状态信息
<Location /server-status>  # 通过http://ip/server-status访问状态页,也可通过http://ip/server-status?refresh=N访问,表示每隔                                 N秒刷新一次页面
    SetHandler server-status
    Require host .example.com
    Require ip 127
</Location>

#ExtendedStatus On            # 是否扩展状态信息,以更详细的显示状态,但扩展状态信息会导致服务器运行效率降低

# 服务器信息
<Location /server-info>
    SetHandler server-info
    Require host .example.com
    Require ip 127
</Location>

4、子配置文件httpd-vhosts.conf

httpd-vhosts.conf用于配置虚拟主机。如需启用该配置文件,则将httpd.conf中的如下内容取消注释:

#Include conf/extra/httpd-vhosts.conf

该文件中对虚拟主机的定义非常简单,具体如下(配置文件中的示例):

<VirtualHost *:80>
    ServerAdmin webmaster@dummy-host.example.com                 # 网站管理员电子邮件
    DocumentRoot "/usr/local/httpd/docs/dummy-host.example.com"  # 虚拟主机的网站根目录
    ServerName dummy-host.example.com                            # 虚拟主机的域名
    ServerAlias www.dummy-host.example.com                       # 虚拟主机的别名
    ErrorLog "logs/dummy-host.example.com-error_log"             # 错误日志
    CustomLog "logs/dummy-host.example.com-access_log" common    # 访问日志
</VirtualHost>
# 必须使用<Directory 路径></Directory>标签对虚拟主机目录进行权限设置,否则客户端将无访问虚拟主机的权限