Apache2.4 配置解析


基于XAMPP Version 8.1.6中Apache的默认配置,对常用配置项进行解析说明:

httpd.conf是Apache服务器的主配置文件,Apache的绝大多数功能都在此文件配置,httpd-ssl.confhttpd-vhosts.conf等作为模块化功能配置文件,在httpd.conf中以Include形式添加,以简化主配置文件,同时便于对模块化功能进行配置。

(一) httpd.conf

Windows下默认路径:%install_path%\xampp\apache\conf\httpd.conf,具体配置指令解释可参考 Apache官方文档 📖

注意以下几点:

  • 默认的相对路径为服务器根目录,如当服务器根目录为"/usr/local/apache2"时,“logs/access_log"就等同于”/usr/local/apache2/logs/access_log",为避免混淆,建议始终使用绝对路径进行配置
  • 注意文件路径必须使用正斜杠而不是反斜杠,如 “c:/apache”,而不是"c:\apache",且不要在目录路径的末尾添加斜杠
  • 配置命令和XML标签英文字符大小写不敏感

服务器根目录

# 定义服务器根目录,也是默认安装目录
# 是保存服务器配置文件、日志和错误信息的目录,注意与网站根目录区分开
Define SRVROOT "C:/xampp/apache"

ServerRoot "C:/xampp/apache"

服务监听端口

# 定义服务监听端口
# 可通过绑定监听端口的IP避免本机所有IP地址同时开启监听,如 Listen <IP>:80
# Listen 80 或 Listen 0.0.0.0:80 或 Listen *:80 代表本机所有IP都开启端口监听
# Listen 127.0.0.1:80 或 Listen localhost:80 代表只在本地环回地址上监听端口,这样服务就只能从本地访问
Listen 80

加载动态共享对象

# 加载动态共享对象(DSO)模块,这里省略注释掉的模块
# 已编译的DSO模块存放在Apache安装目录下的modules目录中
# DSO类似于动态链接库,用于在程序运行时动态加载功能模块的代码
LoadModule access_compat_module modules/mod_access_compat.so
LoadModule actions_module modules/mod_actions.so
LoadModule alias_module modules/mod_alias.so
LoadModule allowmethods_module modules/mod_allowmethods.so
LoadModule asis_module modules/mod_asis.so
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule authn_core_module modules/mod_authn_core.so
LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authz_core_module modules/mod_authz_core.so
LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule authz_user_module modules/mod_authz_user.so
LoadModule autoindex_module modules/mod_autoindex.so
LoadModule cgi_module modules/mod_cgi.so
LoadModule dav_lock_module modules/mod_dav_lock.so
LoadModule dir_module modules/mod_dir.so
LoadModule env_module modules/mod_env.so
LoadModule headers_module modules/mod_headers.so
LoadModule include_module modules/mod_include.so
LoadModule info_module modules/mod_info.so
LoadModule isapi_module modules/mod_isapi.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule cache_disk_module modules/mod_cache_disk.so
LoadModule mime_module modules/mod_mime.so
LoadModule negotiation_module modules/mod_negotiation.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
LoadModule ssl_module modules/mod_ssl.so
LoadModule status_module modules/mod_status.so
LoadModule version_module modules/mod_version.so

服务运行权限

# IfModule是条件配置,只有当后边的模块被加载时配置内容才生效
# 当unixd_module模块被加载时,标签内配置生效
<IfModule unixd_module>

# 定义运行httpd服务的用户/用户组
# 在Linux中默认用户/用户组是类似www-data、daemon的nologin低权限用户
# 这些用户/用户组在创建服务或系统时就已自动创建
# 但是在Windows中默认用户/用户组是运行程序的用户 (一般是管理员或SYSTEM)
User daemon
Group daemon

</IfModule>

联系方式和服务器名

# 这些配置为虚拟主机<VirtualHost>配置的默认值
# 如有相同的配置项则将被<VirtualHost>中的配置覆盖
# 服务器管理员联系邮箱,该信息将会显示在一些输出信息中,比如返回给客户端的错误信息
ServerAdmin postmaster@localhost

# 服务器绑定的域名和端口,用于标识服务器名称
# 如果没有域名可以用IP或localhost标识,不配置该项启动服务时会发出警告信息
ServerName localhost:80

系统目录访问权限

# 目录及其子目录设置访问权限
# 默认配置禁止访问主机文件系统,因此其他允许访问的目录要在下方配置
<Directory />
    # AllowOverride用于配置是否允许使用.htaccess文件中的配置覆盖当前配置生效
    # 有以下5种选项
    # All: 允许使用
    # None: 不允许使用,.htaccess文件配置将被忽略
    # FileInfo: 允许使用文件控制类型的配置指令,包括:AddEncoding, AddLanguage, AddType, DEfaultType, ErrorDocument, LanguagePriority等
    # AuthConfig: 允许使用认证类型的配置指令,包括:AuthDBMGroupFile, AuthDBMUserFile, AuthGroupFile, AuthName, AuthTypeAuthUserFile, Require等
    # Indexes: 允许使用控制目录索引的配置指令,包括:AddDescription, AddIcon, DirectoryIndex, HeaderName, IndexIgnore, IndexOptions等
    # Limit: 允许使用权限控制类型的配置指令,包括:Allow, Deny和Order
    AllowOverride none
    
    # Require用于配置访问权限
    # 常见的配置如下
    # Require all denied: 拒绝所有访问请求,也是Require缺省配置
    # Require all granted: 允许所有访问请求
    # Require ip 192.168 10.10.10: 允许特定IP段的访问请求
    # Require not ip 192.168 10.10.10: 不允许特定IP段的访问请求
    # Require命令缺省标签为 <RequireAny>...</RequireAny>,表示任何一条规则满足即可访问
    # 如果要表示所有规则同时满足时才可访问,需要使用标签 <RequireAll>...</RequireAll>
    Require all denied
    # 注意Allow/Deny from all是Apahce2.2中的命令
</Directory>

网站目录访问权限

# 网站根目录,提供网站服务的目录,注意与服务器根目录区分开
DocumentRoot "C:/xampp/htdocs"
<Directory "C:/xampp/htdocs">
    # 定义在特定目录的特性
    # 有以下8种选项
    # All: 所有特性全部选择,除了MultiViews
    # None: 所有特性全部不选择
    # Indexes: 如果访问网站的目录中没有DirectoryIndex (如index.html),则返回该目录所有文件的格式化列表
    # Includes: 允许服务端包含功能
    # FollowSymLinks: 允许在目录中使用符号链接引导到其他目录
    # SymLinksifOwnerMatch: 当符号链接和其指向的目录的所有者是同一用户时,才会使用符号链接
    # ExecCGI: 允许使用CGI
    # MultiViews: 允许使用内容协商的"多重视图",如果请求的路径可能对应多种类型的文件,那么服务器将根据请求的具体情况自动选择最匹配项
    # 例如在网站根目录下有demo.jpg和demo.html的两个文件,此访问http://localhost/demo,如果根目录中没有demo子目录,那么服务器将会继续查找形如demo.*的文件,然后根据具体情况返回最匹配的demo.jpg或者demo.html
    # 由于没有包含在"Options All"中,因此MultiViews选项需要特殊指定
    Options Indexes FollowSymLinks Includes ExecCGI

    AllowOverride All

    Require all granted
</Directory>

默认访问文件

<IfModule dir_module>
    # 设置请求目录时,Apache默认提供的文件
    DirectoryIndex index.php index.pl index.cgi index.asp index.shtml index.html index.htm \
                   default.php default.pl default.cgi default.asp default.shtml default.html default.htm \
                   home.php home.pl home.cgi home.asp home.shtml home.html home.htm
</IfModule>

禁止访问文件

# 禁止访问.htaccess和.htpasswd文件 
<Files ".ht*">
    Require all denied
</Files>

定义日志格式

# 定义错误日志文件
# 如果<VirtualHost>标签内没有定义错误日志文件,则虚拟主机的错误日志同样被输出到该位置
ErrorLog "logs/error.log"

# 调整错误日志中记录的消息的详细程度
# 可选值包括: debug, info, notice, warn, error, crit, alert, emerg
LogLevel warn

<IfModule log_config_module>
    # 定义用户日志格式
    # 具体格式化字符串的含义参见Apache文档 https://httpd.apache.org/docs/2.4/mod/mod_log_config.html#page-header
    # 定义名为combined的日志格式
    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    # 定义名为common的日志格式
    LogFormat "%h %l %u %t \"%r\" %>s %b" common

    <IfModule logio_module>
      # 定义名为combinedio的日志格式
      LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
    </IfModule>

    # 定义访问日志文件的位置和格式,如果没有在<VirtualHost>中定义,则以此为准
    # 这里定义为上述被LogFormat指令定义的名为combined的日志
    CustomLog "logs/access.log" combined
    #CustomLog "logs/access.log" common
</IfModule>

文件/目录重定向

<IfModule alias_module>
    # Redirect: 用于将访问的文件重定向到新的目录
    # Example:
    # Redirect permanent /foo http://www.example.com/bar

    # Alias: 将网站路径映射到文件系统路径,用于访问不在网站根目录下的内容
    # Example:
    # Alias /webpath /full/filesystem/path
    
    # ScriptAlias: 与Alias类似,只是目标文档被视为脚本
    # 并在请求时由服务器运行,而不是作为发送到客户端的文档
    ScriptAlias /cgi-bin/ "C:/xampp/cgi-bin/"

</IfModule>

CGI配置

<IfModule cgid_module>
    #
    # ScriptSock: 指定用于与mod_cgid的CGI守护进程通信的UNIX套接字的路径
    #Scriptsock cgisock
</IfModule>

# 如果为"/cgi-bin/"定义了ScriptAliased
# 则该路径"C:/xampp/cgi-bin"应与ScriptAliased定义的路径相同
<Directory "C:/xampp/cgi-bin">
    AllowOverride All
    Options None
    Require all granted
</Directory>

<IfModule headers_module>
    # 避免将HTTP_PROXY环境变量传递给此服务器或任何代理后端服务器上的CGI
    RequestHeader unset Proxy early
</IfModule>

MIME类型与文件处理

<IfModule mime_module>
    # 指定文件扩展名与mime-type之间的映射关系文件
    TypesConfig conf/mime.types

    # 允许为特殊的文件类型添加在TypesConfig指向的文件中规定的mime配置文件
    #AddType application/x-gzip .tgz

    # 允许用特定的浏览器对信息进行自适应解压缩
    #AddEncoding x-compress .Z
    #AddEncoding x-gzip .gz .tgz

    # 如果上面的AddEncoding指令被注释,那么应该定义扩展名以明确媒体类型
    AddType application/x-compress .Z
    AddType application/x-gzip .gz .tgz

    # AddHandler允许映射特定文件扩展名到"handlers"
    AddHandler cgi-script .cgi .pl .asp

    # 类型映射
    #AddHandler type-map var

    # 为“服务器端包含”分析.shtml文件
    # 需要添加"includes"选项到"Options"指令
    AddType text/html .shtml
    AddOutputFilter INCLUDES .shtml
</IfModule>

# mod_mime_magic模块允许服务器使用多种关于文件内容的提示,这些提示可用于确定文件类型
<IfModule mime_magic_module>
    # MIMEMagicFile命令用于指定提示定义的位置
    MIMEMagicFile "conf/magic"
</IfModule>

定义错误响应

# 定义服务器请求错误响应,支持三种方式:1) 明文 2) 本地重定向 3) 外部重定向
# Some examples:
#ErrorDocument 500 "The server made a boo boo."
#ErrorDocument 404 /missing.html
#ErrorDocument 404 "/cgi-bin/missing_handler.pl"
#ErrorDocument 402 http://www.example.com/subscription_info.html

其他配置

# 定义请求返回资源之前Ranges的最大数字
# 或者在'default', 'none' 或 'unlimited' 三个值中指定的一个值
# 缺省值Ranges最大为200
#MaxRanges unlimited

# 服务器池管理配置文件
Include conf/extra/httpd-mpm.conf

# 多语言错误消息
#Include conf/extra/httpd-multilang-errordoc.conf

# 动态目录列表配置
Include conf/extra/httpd-autoindex.conf

# 语言设置
Include conf/extra/httpd-languages.conf

# 用户主目录配置
Include conf/extra/httpd-userdir.conf

# 请求和配置实时消息配置
Include conf/extra/httpd-info.conf

# 虚拟主机配置
Include conf/extra/httpd-vhosts.conf

# 本地访问Apache手册配置
#Include conf/extra/httpd-manual.conf

# 分布式创作和版本控制
#Include conf/extra/httpd-dav.conf

# Apache的代理/网关配置
Include "conf/extra/httpd-proxy.conf"
# 多种默认配置
Include "conf/extra/httpd-default.conf"
# XAMPP配置
Include "conf/extra/httpd-xampp.conf"

#  配置mod_proxy_html,使它支持HTML4/XHTML1
<IfModule proxy_html_module>
Include conf/extra/proxy-html.conf
</IfModule>

# SSL/TLS配置
Include conf/extra/httpd-ssl.conf

<IfModule ssl_module>
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
</IfModule>

# XAMPP禁止操作系统关于http/https的一些优化
AcceptFilter http none
AcceptFilter https none

# AJP13代理
<IfModule mod_proxy.c>
<IfModule mod_proxy_ajp.c>
Include "conf/extra/httpd-ajp.conf"
</IfModule>
</IfModule>

(二) httpd-ssl.conf

Apache服务器SSL配置文件,用于处理HTTPS请求。Windows下默认路径:%install_path%\xampp\apache\conf\extra\httpd-ssl.conf,具体可参考 Apache SSL参考文档 📖

# 需要加载模块: mod_log_config, mod_setenvif, mod_ssl,socache_shmcb_module

# 配置SSL库的伪随机数发生器
#SSLRandomSeed startup file:/dev/random  512
#SSLRandomSeed startup file:/dev/urandom 512
#SSLRandomSeed connect file:/dev/random  512
#SSLRandomSeed connect file:/dev/urandom 512

# HTTPS监听端口
# Listen 443

### 配置SSL全局变量 ###

# 列出允许客户端协商的加密算法形式
SSLCipherSuite HIGH:MEDIUM:!MD5:!RC4:!3DES
SSLProxyCipherSuite HIGH:MEDIUM:!MD5:!RC4:!3DES

# 为安全起见,2016年之后应该使用TLSv1.2加密
# 为了限制旧版本加密算法不被使用,可以使用以下命令
# SSLCipherSuite HIGH:MEDIUM:!SSLv3:!kRSA
# SSLProxyCipherSuite HIGH:MEDIUM:!SSLv3:!kRSA

# 强制执行服务器的密码顺序
SSLHonorCipherOrder on 

# 允许用户请求连接的SSL版本
# 不允许使用SSLv3,TLSv1也应该尽快被弃用
SSLProtocol all -SSLv3
SSLProxyProtocol all -SSLv3

# 配置过滤对话框程序
SSLPassPhraseDialog  builtin

# 配置SSL会话缓存:首先是使用的机制,然后是超时时间(秒)
#SSLSessionCache "shmcb:C:/xampp/apache/logs/ssl_scache(512000)"
SSLSessionCache "shmcb:C:/xampp/apache/logs/ssl_scache(512000)"
SSLSessionCacheTimeout  300

### 配置SSL虚拟主机环境变量 ###

# 本机监听443端口的缺省虚拟主机的端口配置
<VirtualHost _default_:443>

# 虚拟主机的常规配置,包括网站主目录、域名、联系邮箱、日志记录位置等信息
DocumentRoot "C:/xampp/htdocs"
ServerName www.example.com:443
ServerAdmin admin@example.com
ErrorLog "C:/xampp/apache/logs/error.log"
TransferLog "C:/xampp/apache/logs/access.log"

# 使能SSL引擎
SSLEngine on

# 配置SSL证书
# 如果同时有RSA和DSA证书,则可以并行配置它们的位置
SSLCertificateFile "conf/ssl.crt/server.crt"
#SSLCertificateFile "conf/ssl.crt/server.crt"

# 配置SSL证书秘钥
# 如果密钥未与证书相结合,则使用此指令指向密钥文件
# 如果同时有RSA和DSA私钥,则可以并行配置它们的位置
SSLCertificateKeyFile "conf/ssl.key/server.key"
#SSLCertificateKeyFile "conf/ssl.key/server.key"

# 配置SSL证书链
#SSLCertificateChainFile "${SRVROOT}/conf/server-ca.crt"

# 配置证书签发机构CA的证书
#SSLCACertificatePath "${SRVROOT}/conf/ssl.crt"
#SSLCACertificateFile "${SRVROOT}/conf/ssl.crt/ca-bundle.crt"

# 配置证书吊销列表CRL
#SSLCARevocationPath "${SRVROOT}/conf/ssl.crl"
#SSLCARevocationFile "${SRVROOT}/conf/ssl.crl/ca-bundle.crl"
#SSLCARevocationCheck chain

# 配置客户端认证类型
# 用于对访问服务器的客户端做认证限制
# 有以下四种选项:
# none: 不需要提供有效证书
# optional: 可以提供有效证书
# require: 必须提供有效证书
# optional_no_ca: 可以提供有效证书但是证书有可能是不被CA证实的
#SSLVerifyClient require
# 证书链长度限制
#SSLVerifyDepth  10

# 配置TLS-SRP相互身份验证
# 启用TLS-SRP并设置OpenSSL SRP验证器文件的路径
#SSLSRPVerifierFile "${SRVROOT}/conf/passwd.srpv"

# 访问控制
# 语法是C和Perl的混合
#<Location />
#SSLRequire (    %{SSL_CIPHER} !~ m/^(EXP|NULL)/ \
#            and %{SSL_CLIENT_S_DN_O} eq "Snake Oil, Ltd." \
#            and %{SSL_CLIENT_S_DN_OU} in {"Staff", "CA", "Dev"} \
#            and %{TIME_WDAY} >= 1 and %{TIME_WDAY} <= 5 \
#            and %{TIME_HOUR} >= 8 and %{TIME_HOUR} <= 20       ) \
#           or %{REMOTE_ADDR} =~ m/^192\.76\.162\.[0-9]+$/
#</Location>

# SSL选项,有以下五种选项
# FakeBasicAuth: 将客户端X.509转化为基本授权方式,以使用标准Auth/DBMAuth方法进行访问
# ExportCertData: 导出SSL_CLIENT_CERT和SSL_SERVER_CERT环境变量
# StdEnvVars: 导出“SSL_*”环境变量
# StrictRequire: 当应用"SSLRequireSSL"或"SSLRequire"时拒绝所有访问
# OptRenegotiate: 优化SSL连接
#SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire
<FilesMatch "\.(cgi|shtml|phtml|php)$">
    SSLOptions +StdEnvVars
</FilesMatch>
<Directory "C:/xampp/apache/cgi-bin">
    SSLOptions +StdEnvVars
</Directory>

# SSL协议调整项:
# SSL/TLS协议断开时默认是mod_SSL发送关闭通知警报,但不等待来自客户端的关闭回复
# 当需要修改断开连接时服务器和客户端的通信过程,有以下两个选项:
# ssl-unclean-shutdown: 当SSL/TLS连接关闭时,不发送关闭通知,也不接收客户端的关闭回复
# ssl-accurate-shutdown: 当SSL/TLS连接断开时,mod_SSL发送关闭通知警报,且等待来自客户端的关闭回复
BrowserMatch "MSIE [2-5]" \
         nokeepalive ssl-unclean-shutdown \
         downgrade-1.0 force-response-1.0

# 服务器SSL日志文件配置
CustomLog "C:/xampp/apache/logs/ssl_request.log" \
          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

</VirtualHost>                                  

(三) httpd-vhosts.conf

虚拟主机配置文件,用于为服务器配置 (多个) 域名/主机名,使得单一服务器上可以运行多个网站。虚拟主机可以 基于IP[:端口] 或者 基于名称 进行区分。Windows下默认路径:%install_path%\xampp\apache\conf\extra\httpd-vhosts.conf,具体可参考 Apache vhosts参考文档 📖

# 需要加载模块: mod_log_config

### 基于名称的虚拟主机配置 ###

#Listen 80

# 针对所有监听80端口的服务器
#<VirtualHost *:80>
    #ServerAdmin webmaster@dummy-host.example.com
    #DocumentRoot "C:/xampp/htdocs/dummy-host.example.com"
    # 服务器用于辨识自己的主机名和端口号,主要用于创建重定向URL
    #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>

#<VirtualHost *:80>
    #ServerAdmin webmaster@dummy-host2.example.com
    #DocumentRoot "C:/xampp/htdocs/dummy-host2.example.com"
    #ServerName dummy-host2.example.com
    #ErrorLog "logs/dummy-host2.example.com-error.log"
    #CustomLog "logs/dummy-host2.example.com-access.log" common
#</VirtualHost>

### 基于IP和端口的虚拟主机配置 ###

#Listen 80
#Listen 172.20.30.50:8080

# 针对IP为172.20.30.40的服务器
#<VirtualHost 172.20.30.40>
    #DocumentRoot "/www/example1"
    #ServerName www.example.com
#</VirtualHost>

# 针对地址为172.20.30.50:80的服务器
#<VirtualHost 172.20.30.50:80>
    #DocumentRoot "/www/example2"
    #ServerName www.example.org
#</VirtualHost>

# 针对IP为172.20.30.50:8080的服务器
#<VirtualHost 172.20.30.50:8080>
    #DocumentRoot "/www/example2-8080"
    #ServerName www.example.org
#</VirtualHost>

(四) .htaccess

.htaccess是Apache服务器下的配置文件,作用范围仅限于 文件所在目录,用于配置目录访问权限、错误返回界面、文件解析方式、重定向等。httpd.conf在服务启动时运行一次,而.htaccess只要有用户访问目录时就加载,开销大、速度慢,但可以灵活配置,方便迁移。

具体配置指令参考httpd.conf,以及 Apache官方文档 📖

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值