httpd.conf
是Apache服务器的主配置文件,Apache的绝大多数功能都在此文件配置,httpd-ssl.conf
、httpd-vhosts.conf
等作为模块化功能配置文件,在httpd.conf
中以Include形式添加,以简化主配置文件,同时便于对模块化功能进行配置。
Windows下默认路径:%install_path%\xampp\apache\conf\httpd.conf
,具体配置指令解释可参考 Apache官方文档
注意以下几点:
# 定义服务器根目录,也是默认安装目录
# 是保存服务器配置文件、日志和错误信息的目录,注意与网站根目录区分开
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>
<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>
<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>
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>
虚拟主机配置文件,用于为服务器配置 (多个) 域名/主机名,使得单一服务器上可以运行多个网站。虚拟主机可以 基于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是Apache服务器下的配置文件,作用范围仅限于 文件所在目录,用于配置目录访问权限、错误返回界面、文件解析方式、重定向等。httpd.conf在服务启动时运行一次,而.htaccess只要有用户访问目录时就加载,开销大、速度慢,但可以灵活配置,方便迁移。
具体配置指令参考httpd.conf,以及 Apache官方文档