精品软件与实用教程
Apache2.4.41的配置文件默认位置是/usr/local/apache2/conf/httpd.conf
下面开始详细解读一下httpd.conf的各种变量的配置。
/usr/local/apache2/conf/httpd.conf,具体文件内容如下
# #这是主要的Apache HTTP服务器配置文件,它包含了服务器所需的可执行指令配置。 #Apache HTTP服务器2.4文档请访问http://httpd.apache.org/docs/2.4/zh-cn。 #注意:请访问指令索引页面,每个在 Apache 标准发行版中可用的指令都列在下面的链接里。它们使用一致的格式描述,而且有术语字典。 #http://httpd.apache.org/docs/2.4/zh-cn/mod/directives.html #警告:请不要简单的阅读此处的内容,如果你没有搞明白配置命令之前,请先阅读以上链接的内容。 #ServerRoot配置日志文件名:如果您需要配置服务器的日志文件路径,以"/"(对于Win32,则为"drive:/")开头,服务器将使用该显式路径。 #如果没有设置路径与"/"一起,ServerRoot的值是默认值,显示为,"logs/access_log" #将ServerRoot设置为"/usr/local/apache2",日志在服务器上的位置是"/usr/local/apache2/logs/access_log"。 # #ServerRoot:Apache HTTP服务器所在位置,服务器配置、出错信息、日志文件都保存在根目录下。。 #不要在目录路径的末尾添加"/"。如果你指出将ServerRoot放在非本地磁盘上,请确保在Mutex指令(如果使用基于文件的互斥锁)。 #如果您想分享为多个httpd守护程序使用相同的ServerRoot,您需要在以下位置进行更改最少PidFile。 ServerRoot "/usr/local/apache2" #Apache HTTP服务器安装位置,安装在/usr/local/apache2目录下。 #Mutex:允许您设置互斥机制和互斥文件目录用于单个互斥锁,或更改全局默认值 #如果互斥锁是基于文件的,则取消注释并更改目录,并且默认互斥锁文件目录不在本地磁盘上或不适合某些其他原因。 #Mutex的默认值:日志 #侦听:允许您将Apache绑定到特定的IP地址/端口,而不是默认端口。详细内容请参考指令。 #将其更改为特定IP地址和端口,如下所示: #防止Apache绑定服务器上所有的IP地址。 #例如:Listen 12.34.56.78:8080 这个意思是只可以通过12.34.56.78下面的8080端口访问http服务器。 Listen 8088 #单独设置端口,所有服务器上绑定的ip都可以使用。将端口设置为8088, #因为服务器上安装了另一个HTTP服务端,避免和80端口冲突,正常安装时无需更改80端口。 #动态共享对象(DSO)支持 #为了能够使用作为DSO构建的模块功能,您需要必须在此位置放置相应的"LoadModule"行,它所包含的指令实际上是available _before_they。 #静态编译模块(由httpd -l列出的模块)不需要在这里加载。 #示例: #LoadModule foo_module modules/mod_foo.so LoadModule authn_file_module modules/mod_authn_file.so #LoadModule authn_dbm_module modules/mod_authn_dbm.so #LoadModule authn_anon_module modules/mod_authn_anon.so #LoadModule authn_dbd_module modules/mod_authn_dbd.so #LoadModule authn_socache_module modules/mod_authn_socache.so LoadModule authn_core_module modules/mod_authn_core.so LoadModule authz_host_module modules/mod_authz_host.so LoadModule authz_groupfile_module modules/mod_authz_groupfile.so LoadModule authz_user_module modules/mod_authz_user.so #LoadModule authz_dbm_module modules/mod_authz_dbm.so #LoadModule authz_owner_module modules/mod_authz_owner.so #LoadModule authz_dbd_module modules/mod_authz_dbd.so LoadModule authz_core_module modules/mod_authz_core.so #LoadModule authnz_ldap_module modules/mod_authnz_ldap.so LoadModule access_compat_module modules/mod_access_compat.so LoadModule auth_basic_module modules/mod_auth_basic.so #LoadModule auth_form_module modules/mod_auth_form.so #LoadModule auth_digest_module modules/mod_auth_digest.so #LoadModule allowmethods_module modules/mod_allowmethods.so #LoadModule file_cache_module modules/mod_file_cache.so #LoadModule cache_module modules/mod_cache.so #LoadModule cache_disk_module modules/mod_cache_disk.so #LoadModule cache_socache_module modules/mod_cache_socache.so #LoadModule socache_shmcb_module modules/mod_socache_shmcb.so #LoadModule socache_dbm_module modules/mod_socache_dbm.so #LoadModule socache_memcache_module modules/mod_socache_memcache.so #LoadModule socache_redis_module modules/mod_socache_redis.so #LoadModule watchdog_module modules/mod_watchdog.so #LoadModule macro_module modules/mod_macro.so #LoadModule dbd_module modules/mod_dbd.so #LoadModule dumpio_module modules/mod_dumpio.so #LoadModule buffer_module modules/mod_buffer.so #LoadModule ratelimit_module modules/mod_ratelimit.so LoadModule reqtimeout_module modules/mod_reqtimeout.so #LoadModule ext_filter_module modules/mod_ext_filter.so #LoadModule request_module modules/mod_request.so #LoadModule include_module modules/mod_include.so LoadModule filter_module modules/mod_filter.so #LoadModule substitute_module modules/mod_substitute.so #LoadModule sed_module modules/mod_sed.so #LoadModule deflate_module modules/mod_deflate.so LoadModule mime_module modules/mod_mime.so #LoadModule ldap_module modules/mod_ldap.so LoadModule log_config_module modules/mod_log_config.so #LoadModule log_debug_module modules/mod_log_debug.so #LoadModule logio_module modules/mod_logio.so LoadModule env_module modules/mod_env.so #LoadModule expires_module modules/mod_expires.so LoadModule headers_module modules/mod_headers.so #LoadModule unique_id_module modules/mod_unique_id.so LoadModule setenvif_module modules/mod_setenvif.so LoadModule version_module modules/mod_version.so #LoadModule remoteip_module modules/mod_remoteip.so #LoadModule proxy_module modules/mod_proxy.so #LoadModule proxy_connect_module modules/mod_proxy_connect.so #LoadModule proxy_ftp_module modules/mod_proxy_ftp.so #LoadModule proxy_http_module modules/mod_proxy_http.so #LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so #LoadModule proxy_scgi_module modules/mod_proxy_scgi.so #LoadModule proxy_uwsgi_module modules/mod_proxy_uwsgi.so #LoadModule proxy_fdpass_module modules/mod_proxy_fdpass.so #LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so #LoadModule proxy_ajp_module modules/mod_proxy_ajp.so #LoadModule proxy_balancer_module modules/mod_proxy_balancer.so #LoadModule proxy_express_module modules/mod_proxy_express.so #LoadModule proxy_hcheck_module modules/mod_proxy_hcheck.so #LoadModule session_module modules/mod_session.so #LoadModule session_cookie_module modules/mod_session_cookie.so #LoadModule session_crypto_module modules/mod_session_crypto.so #LoadModule session_dbd_module modules/mod_session_dbd.so #LoadModule slotmem_shm_module modules/mod_slotmem_shm.so #LoadModule ssl_module modules/mod_ssl.so #LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so #LoadModule lbmethod_bytraffic_module modules/mod_lbmethod_bytraffic.so #LoadModule lbmethod_bybusyness_module modules/mod_lbmethod_bybusyness.so #LoadModule lbmethod_heartbeat_module modules/mod_lbmethod_heartbeat.so LoadModule unixd_module modules/mod_unixd.so #LoadModule dav_module modules/mod_dav.so LoadModule status_module modules/mod_status.so LoadModule autoindex_module modules/mod_autoindex.so #LoadModule info_module modules/mod_info.so #LoadModule cgid_module modules/mod_cgid.so #LoadModule dav_fs_module modules/mod_dav_fs.so #LoadModule vhost_alias_module modules/mod_vhost_alias.so #LoadModule negotiation_module modules/mod_negotiation.so LoadModule dir_module modules/mod_dir.so #LoadModule actions_module modules/mod_actions.so #LoadModule speling_module modules/mod_speling.so #LoadModule userdir_module modules/mod_userdir.so LoadModule alias_module modules/mod_alias.so #LoadModule rewrite_module modules/mod_rewrite.so #如果您希望httpd作为一个不同的用户或组运行,您必须首先以root的身份运行httpd,然后它才会切换。User/Group: 运行httpd的用户/用户组的名称。
一般都是创建一个独立的用户组和用户来运行httpd服务。
User www #用来运行httpd服务的用户名称。 Group www #用户所属的用户组名称。 #"main"服务器配置 #本节中的指令设置了'main'服务器使用的值,可响应服务器未处理的任何请求 #修改指令。 您稍后可以在容器内修改相关内容。容器里的指令现在是默认值。 #所有这些指令都可能出现在容器内,在这种情况下,这些默认设置将被定义的虚拟主机覆盖。 #ServerAdmin:您的地址,应通过电子邮件发送服务器问题。 该地址出现在某些服务器生成的页面上,例如错误文档。 例如 admin@your-domain.com ServerAdmin xxx@gmail.com #ServerName提供服务器用来标识自身的名称和端口。通常可以自动确定该名称和端口,但是我们建议您明确指定它,以防止启动期间出现问题。 #如果您的服务器没有注册的DNS名称,请在此处输入其IP地址。 #注意:主机名不能随便指定。必须是你的机器有效的DNS名称。可以使用IP地址或者域名,本机测试时候可以使用127.0.0.1或者localhost #ServerName www.example.com:80 #拒绝访问服务器的整个文件系统。 您必须在以下其他块中明确允许访问Web内容目录。 #Directory语句就是用来定义目录的访问限制的 #AllowOverride None表示不允许这个目录下的访问控制文件来改变这里进行的配置 AllowOverride none Require all denied #注意:从现在开始,您必须专门允许启用特定功能。因此,如果某些功能无法正常运行,请确保在下面专门启用了该功能。 #DocumentRoot:您web文档的存放目录。 默认情况下,所有web请求均来自此目录,但是符号链接和别名可用于指向其他位置。 DocumentRoot "/usr/local/apache2/htdocs"#Options指令的可能值为“ None”,“ All”或以下任意组合: #Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews #"MultiViews“必须明确地命名,不可以使用"Options All"。 Options指令既复杂又重要。 请浏览http://httpd.apache.org/docs/2.4/mod/core.html#options了解更多信息。
Options Indexes FollowSymLinks #AllowOverride控制可以在.htaccess文件中放置哪些指令。 它可以是"All", "None", 或关键字的任意组合: #AllowOverride FileInfo AuthConfig Limit AllowOverride None #控制谁可以从该服务器获取内容。 Require all granted #DirectoryIndex:设置在请求目录时Apache将提供的文件。 #设置访问的默认文档,index.html index.php DirectoryIndex index.html #以下几行防止Web客户端查看.htaccess和.htpasswd文件。Require all denied #ErrorLog:错误日志文件的位置。 #如果未在容器中指定ErrorLog指令,则与该虚拟主机有关的错误消息将记录在里指定的目录下"。 #如果没有指定特定的日志存放位置,默认在"logs/error_log"下。 ErrorLog "logs/error_log" #LogLevel:控制记录到error_log的消息数。 #可用数值包括:debug(调试), info(信息), notice(通知), warn(警告), error(错误), crit(暴击),alert(警报), emerg(紧急). LogLevel warn #以下指令定义了与CustomLog指令一起使用的某些格式昵称(请参阅下文)。 LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%h %l %u %t \"%r\" %>s %b" common #您需要启用mod_logio.c以使用%I和%O LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio #访问日志文件的位置和格式(通用日志文件格式)。 #如果未在容器中定义任何访问日志文件,则将在此处记录它们。 #相反,如果您定义每个访问日志文件,则事务将记录在其中,而不记录在该文件中。 CustomLog "logs/access_log" common #如果您希望使用具有访问权限,代理和引用信息的日志文件(组合日志文件格式),则可以使用以下指令。 #CustomLog "logs/access_log" combined #重定向:允许您告知客户端有关服务器命名空间中曾经存在但不再存在的文档。 客户将在新位置对文档提出新要求。 #例如: #Redirect permanent /foo http://www.example.com/bar #别名:将Web路径映射到文件系统路径,并用于访问不存在于DocumentRoot下的内容。 #例如: #Alias /webpath /full/filesystem/path #如果/webpath/,后面有一个/的话,则服务器将要求其出现在URL中。您可能还需要提供一个部分,以允许访问文件系统路径。 #ScriptAlias:控制哪些目录包含服务器脚本。 #ScriptAliases本质上与Aliases相同,区别在于目标目录中的文档被视为应用程序,并在请求时由服务器运行,而不是作为发送给客户端的文档。 #关于尾随“ /”的相同规则也适用于ScriptAlias指令和Alias。 #这个是讲在apache2.4中虚拟目录如何配置。 ScriptAlias /cgi-bin/ "/usr/local/apache2/cgi-bin/" #ScriptSock:在线程服务器上,指定用于与mod_cgid的CGI守护程序进行通信的UNIX套接字的路径。 #Scriptsock cgisock #"/usr/local/apache2/cgi-bin"应该更改为您的ScriptAliased #CGI目录存在(如果已配置)。 AllowOverride None Options None Require all granted #避免将HTTP_PROXY环境传递到此或任何持久存在"httpoxy"缺陷的代理后端服务器上的CGI。 #IProxy未定义"代理"请求标头,IANA未列出 RequestHeader unset Proxy early #TypesConfig指向包含从文件扩展名到MIME类型的映射列表的文件。 TypesConfig conf/mime.types #AddType允许您添加或覆盖TypesConfig中为特定文件类型指定的MIME配置文件。 #AddType application/x-gzip .tgz #AddEncoding允许您让某些浏览器动态解压缩信息。 注意:并非所有浏览器都支持此功能。 #AddEncoding x-compress .Z #AddEncoding x-gzip .gz .tgz #如果上面的AddEncoding指令已被注释掉,那么您可能应该定义这些扩展名以指示媒体类型: AddType application/x-compress .Z AddType application/x-gzip .gz .tgz #AddHandler允许您将某些文件扩展名映射到"处理程序": #与文件类型无关的动作。它们既可以内置在服务器中,也可以与Action指令一起添加(请参见下文) #要在ScriptAliased目录之外使用CGI脚本: #(您还需要将“ ExecCGI”添加到“ Options”指令。) #AddHandler cgi-script .cgi #对于类型映射(协商的资源): #AddHandler type-map var 过滤器使您可以在将内容发送到客户端之前对其进行处理。
#解析.shtml文件以获取服务器端包含(SSI): #(您还需要在“选项”指令中添加“包含”。) #AddType text/html .shtml #AddOutputFilter INCLUDES .shtml #mod_mime_magic模块允许服务器使用文件本身内容中的各种提示来确定其类型。 MIMEMagicFile指令告诉模块提示定义位于何处。 #MIMEMagicFile conf/magic #可自定义的错误响应有以下三种形式: #1)纯文本2)本地重定向3)外部重定向 #一些例子: #ErrorDocument 500"服务器发出了嘘声。" #ErrorDocument 404 /missing.html #ErrorDocument 404"/cgi-bin/missing_handler.pl" #ErrorDocument 402 http://www.example.com/subscription_info.html #MaxRanges:返回整个资源或特殊值"default","none"或"unlimited"之一,请求中最大范围数。默认设置是接受200范围。 #MaxRanges unlimited #EnableMMAP和EnableSendfile:在支持该功能的系统上,可以使用内存映射或sendfile syscall进行传递文件。 #这通常可以提高服务器性能,但是必须从网络安装的服务中关闭文件系统,或者是否支持这些功能在您的系统上损坏。 #默认值:EnableMMAP On, EnableSendfile Off #EnableMMAP off #EnableSendfile on #补充配置 #可以包含conf/extra/目录中的配置文件以添加其他功能或修改服务器的默认配置,或者您可以仅在此处复制其内容并根据需要进行更改。 #服务器池管理(特定于MPM) #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 HTTP Server手册 #include conf/extra/httpd-manual.conf #分布式创作和版本控制(WebDAV) #include conf/extra/httpd-dav.conf #各种默认设置 #include conf/extra/httpd-default.conf #配置mod_proxy_html以了解HTML4/XHTML1 Include conf/extra/proxy-html.conf IfModule> Include安全(SSL / TLS)连接 #include conf/extra/httpd-ssl.conf Include注意:必须存在以下内容,才能在没有/dev/random等效项但具有静态编译的mod_ssl的平台上支持不使用SSL的启动。 SSLRandomSeed startup builtin SSLRandomSeed connect builtin
容器下指令的详细解释:
Options设置 可以使用Options来控制这个目录下的一些访问特性设置
All 所有的目录特性都有效,这是缺省状态
None 所有的目录特性都无效
FollowSymLinks 允许使用符号连接,这将使浏览器有可能访问文档根目录(DocumentRoot)之外的文档
SymLinksIfOwnerMatch 只有符号连接的目的与符号连接本身为同一用户所拥有时,才允许访问,这个设置将增加一些安全性
ExecCGI 允许这个目录下可以执行CGI程序
Indexes 允许浏览器可以生成这个目录下所有文件的索引,使得在这个目录下没有index.html(或其他索引文件)时,能向浏览器发送这个目录下的文件列表
AllowOverride的设置 对每个目录访问控制文件作用的影响
All 缺省值,使访问控制文件可以覆盖系统配置
None 服务器忽略访问控制文件的设置
Options 允许访问控制文件中可以使用Options参数定义目录的选项
FileInfo 允许访问控制文件中可以使用AddType等参数设置
AuthConfig 允许访问控制文件使用AuthName,AuthType等针对每个用户的认证机制,这使目录属主能用口令和用户名来保护目录
Limit 允许对访问目录的客户机的IP地址和名字进行限制
以上详细的翻译并解释了httpd.conf的各种变量的配置和Apache2.4.4服务器配置文件的主要结构,最值得注意就是这里,它针对分布在不同目录下的子目录定义访问控制权限。还需要注意Apache一些版本的兼容性。