httpd2.4.6配置文件解释说明
本文httpd版本为:2.4.6
ServerRoot
先来看一下httpd.conf配置文件中的ServerRoot默认定义:
# cat /etc/httpd/conf/httpd.conf |egrep ^ServerRoot
ServerRoot "/etc/httpd"
这里我们看到 ServerRoot 后面跟的是一个目录路径,再来看一下这个目录路径里都有些什么吧。
# tree /etc/httpd
/etc/httpd
├── conf
│ ├── httpd.conf
│ ├── httpd.conf.bak
│ ├── httpd.conf.rpmsave
│ └── magic
├── conf.d
│ ├── autoindex.conf
│ ├── php.conf
│ ├── README
│ ├── userdir.conf
│ ├── virhosts.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
│ └── 10-php.conf
├── logs -> ../../var/log/httpd
├── modules -> ../../usr/lib64/httpd/modules
└── run -> /run/httpd
# ll /run/httpd/
total 8
-rw-r--r--. 1 root root 8 Feb 27 03:27 authdigest_shm.96049
drwx------. 2 apache apache 40 Feb 24 11:32 htcacheclean
-rw-r--r--. 1 root root 6 Feb 27 03:27 httpd.pid
可以看出这是一个保存配置文件的目录,还有3个链接文件,分别是日志目录,模块目录和运行时PID文件目录。默认为安装目录,不需更改。
配置语法:ServerRoot directory-path
如: ServerRoot "/usr/local/apache-2.4.6"(编译安装情况下)
注意,此指令中的路径最后不要加 / 。
Listen
指定服务器监听的IP和端口。默认情况下Apache会在所有IP地址上监听。Listen是Apache2.0以后版本必须设置的指令,如果在配置文件中找不到这个指令,服务器将
无法启动。
语法:Listen [IP-address:]portnumber [protocol]
Listen指令指定服务器在那个端口或地址和端口的组合上监听接入请求。如果只指定一个端口,服务器将在所有地址上监听该端口。如果指定了地址和端口的组合,服务器将在指定地址的指定端口上监听。可选的protocol参数在大多数情况下并不需要,若未指定该参数,则将为443端口使用默认的https 协议,为其它端口使用http协议。
使用多个Listen指令可以指定多个不同的监听端口和/或地址端口组合。
默认为:Listen 80
如果让服务器接受80和8080端口上请求,可以这样设置:
Listen 80
Listen 8080
如果让服务器在两个确定的地址端口组合上接受请求,可以这样设置:
Listen 192.168.2.1:80
Listen 192.168.2.2:8080
如果使用IPV6地址,必须用方括号把IPV6地址括起来:
LoadModule
Include conf.modules.d/*.conf
2.4.6版本中所有模块加载采用了配置文件,使用Include conf.modules.d/*.conf这条指令来加载模块,这也是httpd高度模块化的一个表现。
来看一下conf.module.d/10-php.conf
# cat /etc/httpd/conf.modules.d/10-php.conf
#
# PHP is an HTML-embedded scripting language which attempts to make it
# easy for developers to write dynamically generated webpages.
#
<IfModule prefork.c>
LoadModule php5_module modules/libphp5.so
</IfModule>
LoadModule语法:LoadModule module filename
那么10-php.conf这个文件是怎么来的呢,经过测试当你yum install php的时候会自动在这个目录下生成这个配置文件,当yum remove php时会自动删除这个文件。
user group
User apache
Group apache
User:设置实际提供服务的子进程的用户。为了使用这个指令,服务器必须以root身份启动和初始化。如果你以非root身份启动服务器,子进程将不能够切换至非特权用户,并继续以启动服务器的原始用户身份运行。如果确实以root用户启动了服务器,那么父进程将仍然以root身份运行。
用于运行子进程的用户必须是一个没有特权的用户,这样才能保证子进程无权访问那些不想为外界所知的文件,同样的,该用户亦需没有执行那些不应当被外界执行的程序的权限。强烈建议专门为Apache子进程建立一个单独的用户和组。一些管理员使用nobody用户,但是这并不能总是符合要求,因为可能有其他程序也在使用这个用户。
Group:设置提供服务的Apache子进程运行时的用户组。为了使用这个指令,Apache必须以root初始化启动,否则在切换用户组时会失败,并继续以初始化启动时的用户组运行。
# pstree root
systemd─|
├─httpd───6*[httpd]
可以看到httpd父进程以root身份启动后生成了6个子进程。
# ps aux |grep httpd
root 1784 0.0 0.5 308440 12012 ? Ss 18:29 0:00 /usr/sbin/httpd -DFOREGROUND
apache 1785 0.0 0.3 310636 8712 ? S 18:29 0:00 /usr/sbin/httpd -DFOREGROUND
apache 1786 0.0 0.2 310524 6688 ? S 18:29 0:00 /usr/sbin/httpd -DFOREGROUND
apache 1787 0.0 0.2 310524 6688 ? S 18:29 0:00 /usr/sbin/httpd -DFOREGROUND
apache 1788 0.0 0.2 310524 6456 ? S 18:29 0:00 /usr/sbin/httpd -DFOREGROUND
apache 1789 0.0 0.2 310524 6688 ? S 18:29 0:00 /usr/sbin/httpd -DFOREGROUND
apache 1790 0.0 0.2 310524 6456 ? S 18:29 0:00 /usr/sbin/httpd -DFOREGROUND
通过ps命令看到6个子进程的运行身份是apache
ServerName
ServerName:设置服务器用于辨识自己的主机名和端口号。
语法:ServerName fully-qualified-domain-name[:port]
当没有指定ServerName时,服务器会尝试对IP地址进行反向查询来推断主机名。如果在ServerName中没有指定端口号,服务器会使用接受请求的那个端口。
为了加强可靠性和可预测性,建议使用ServerName显式的指定一个主机名和端口号。
如果使用的是基于域名的虚拟主机,在段中的ServerName将是为了匹配这个虚拟主机,在"Host:"请求头中必须出现的主机名。
例如:
# cat /etc/httpd/conf.d/virhosts.conf
#virtual host 1
<VirtualHost 192.168.138.200:80>
ServerName www1.frank.com
DocumentRoot "/var/www/vhosts/www1"
ErrorLog "/var/log/httpd/www1/error_log"
CustomLog "/var/log/httpd/www1/access_log" combined
</VirtualHost>
Directory
<Directory>和</Directory>用于封装一组指令,使之仅对某个目录及其子目录生效。
语法:<Directory Directory-path> ... </Directory>
Directory-path可以是一个目录的完整路径,或是包含了Unix shell匹配语法的通配符字符串。在通配符字符串中,"?"匹配任何单个的字符,"*"匹配任何字符序列。也可以使用"[]"来确定字符范围。在"~" 字符之后也可以使用正则表达式。
如果有多个(非正则表达式)配置段符合包含某文档的目录(或其父目录),那么指令将以短目录优先的规则进行应用,并包含.htaccess文件中的指令。
正则表达式将在所有普通配置段之后予以考虑。所有的正则表达式将根据它们出现在配置文件中的顺序进行应用。
<Directory>指令不可被嵌套使用,也不能出现在<Limit>或<LimitExcept>配置段中。
# cat conf/httpd.conf |egrep -v "^#|\s{4}#" |grep -Ev "^$"
<Directory />
AllowOverride none
Require all denied
</Directory>
<Directory "/var/www">
AllowOverride None
Require all granted
</Directory>
<Directory "/var/www/html">
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
AllowOverride:确定允许存在于.htaccess文件中的指令类型。
语法:AllowOverride All|None|directive-type [directive-type] ...
如果此指令被设置为None ,那么.htaccess文件将被完全忽略。事实上,服务器根本不会读取.htaccess文件。
当此指令设置为All时,所有具有".htaccess"作用域的指令都允许出现在.htaccess文件中。
directive-type可以是下列各组指令之一:
AuthConfig 允许使用与认证授权相关的指令
FileInfo 允许使用控制文档类型的指令、控制文档元数据的指令、mod_rewrite中的指令、mod_actions中的Action指令
Indexes 允许使用控制目录索引的指令
Limit 允许使用控制主机访问的指令
Options[=Option,...] 允许使用控制指定目录功能的指令(Options和XBitHack)。可以在等号后面附加一个逗号分隔的(无空格的)Options选项列表,用来控制允许Options指令使用哪些选项。
AllowOverride仅在不包含正则表达式的配置段中才是有效的。在<Location>, <DirectoryMatch>, <Files>配置段中都是无效的。
Order:控制默认的访问状态与Allow和Deny指令生效的顺序。
Ordering取值范围是以下几种范例之一:
Deny,Allow Deny指令在Allow指令之前被评估。默认允许所有访问。任何不匹配Deny指令或者匹配Allow指令的客户都被允许访问。
Allow,Deny Allow指令在Deny指令之前被评估。默认拒绝所有访问。任何不匹配Allow指令或者匹配Deny指令的客户都将被禁止访问。
Mutual-failure 只有出现在Allow列表并且不出现在Deny列表中的主机才被允许访问。这种顺序与"Order Allow,Deny"具有同样效果,不赞成使用。
关键字只能用逗号分隔,它们之间不能有空格,在所有情况下每个Allow和Deny指令语句都将被评估。
Allow:控制哪些主机可以访问服务器的该区域。可以根据主机名、IP地址、 IP地址范围或其他环境变量中捕获的客户端请求特性进行控制。
语法:Allow from all|host|env=env-variable [host|env=env-variable] ...
这个指令的第一个参数总是"from",随后的参数可以有三种不同形式:如果指定"Allow from all",则允许所有主机访问,按照下述Deny和Order指令的配置;若要只允许特定的主机或主机群访问服务器,host可以用下面任何一种格式来指定:一个(部分)域名、完整的IP地址、部分IP地址、网络/掩码、网络/nnn无类别域间路由规格;第三种参数格式允许对服务器的访问由环境变量的一个扩展指定,指定"Allow from env=env-variable"时,如果环境变量env-variable存在则访问被允许,使用由mod_setenvif提供的指令,服务器用一种基于客户端请求的弹性方式提供了设置环境变量的能力。因此,这条指令可以用于允许基于像User-Agent(浏览器类型)、Referer或其他 HTTP请求头字段的访问。
Deny:控制哪些主机被禁止访问服务器的该区域。可以根据主机名、IP地址、 IP地址范围或其他环境变量中捕获的客户端请求特性进行控制。
语法:Deny from all|host|env=env-variable [host|env=env-variable] ...
此指令的参数设置和Allow指令完全相同。
DirectoryIndex:当客户端请求一个目录时寻找的资源列表。
语法:DirectoryIndex Local-url [Local-url] ...
Local-url(%已解码的)是一个相对于被请求目录的文档的URL(通常是那个目录中的一个文件)。可以指定多个URL,服务器将返回最先找到的那一个,比如:
DirectoryIndex index.html index.php
DocumentRoot
指定网站文件存放的目录路径,通常配置在主配置文件中,或虚拟主机文件中。
语法:DocumentRoot directory-path
在没有使用类似Alias这样的指令的情况下,服务器会将请求中的URL附加到DocumentRoot后面以构成指向文档的路径。
如果directory-path不是绝对路径,则被假定为是相对于ServerRoot的路径。
指定DocumentRoot时不应包括最后的"/"。
httpd2.4.6配置文件解释说明的更多相关文章
- [分享] 封装工具ES4配置文件解释
[分享] 封装工具ES4配置文件解释 LiQiang 发表于 2015-2-3 14:41:21 https://www.itsk.com/thread-346132-1-4.html [分享] 封装 ...
- mongd配置文件解释
mongd配置文件解释 系统日志配置 systemLog: verbosity: <int> quiet: <boolean> traceAllExceptions: < ...
- Linux系统 /etc目录下主要配置文件解释
这些都是比较有实用性的系统配置,收藏下,以备不时之需!以下是etc下重要配置文件解释: 1./etc/hosts #文件格式: IPaddress hostname aliases #文件功能: 提 ...
- springmvc 注解 配置文件解释
概述 继 Spring 2.0 对 Spring MVC 进行重大升级后,Spring 2.5 又为 Spring MVC 引入了注解驱动功能.现在你无须让 Controller 继承任何接口,无需在 ...
- http服务详解(2)——httpd2.2的配置文件常见设置
摘要:一个服务的配置文件非常重要,弄懂配置文件是熟练掌握服务的必要前提. 一.httpd-2.2常见文件介绍 (1)配置文件: 主配置文件尽量别改,改自己的子配置文件 /etc/httpd/conf/ ...
- redis 配置文件解释 以及集群部署
redis是一款开源的.高性能的键-值存储(key-value store),和memcached类似,redis常被称作是一款key-value内存存储系统或者内存数据库,同时由于它支持丰富的数据结 ...
- redis的配置文件解释
redis的守护进行 守护进程(Daemon Process),也就是通常说的 Daemon 进程(精灵进程),是 Linux 中的后台服务进程.它是一个生存期较长的进程,通常独立 于控制终端并且周期 ...
- 【log4net】配置文件解释
ASP.NET MVC 1.web.config: <configSections> <section name="log4net" type="log ...
- Hibernate配置文件解释
Hibernate配置文件主要用于配置数据库连接和Hibernate运行时所需的各种属性每个Hibernate配置文件对应一个Configuration对象Hibernate配置文件可以有两种格式: ...
随机推荐
- MNIST机器学习进阶
# -*- coding: utf-8 -*-"""Created on Wed Oct 17 08:49:28 2018 @author: Administrator& ...
- 2019-04-19-day036-协程与进程池
内容回顾 11:30 码云 :王老师检查作业+定期抽查 注册账号 考试的时间 threading.enumerate(),能够获取到当前正在运行的所有线程对象列表 守护线程 守护线程会等待所有的非守护 ...
- CSS3 正方体
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- vue启动报错
在安装依赖后,启动时报错 修复方法:将项目node_modules文件夹删除掉,重新cnpm install即可
- ABP vue+asp.net core yarn serve报 Cannot find module 'typescript/package.json错误
abp的前端在node install 安装完成了相关的依赖包,直接yarn serve运行相关服务的时候报"Cannot find module 'typescript/package.j ...
- 基于CBOW网络手动实现面向中文语料的word2vec
最近在工作之余学习NLP相关的知识,对word2vec的原理进行了研究.在本篇文章中,尝试使用TensorFlow自行构建.训练出一个word2vec模型,以强化学习效果,加深理解. 一.背景知识: ...
- Classnotfoundexception 与 noClassDelfaultError的区别
ClassNotFoundException 这个异常特别常见,就是class找不到异常,一般的问题就是: 1 调用class的forName方法时,找不到指定的类 2 ClassLoader 中的 ...
- ADO.NET读取配置文件
App.config <?xml version="1.0" encoding="utf-8" ?> <configuration> & ...
- 处理文件中的" M-BM- "特殊符号
有时为了方便,会在Excel中进行代码拼装,比如说是建表SQL语句,但是在复制的代码过程中可能会带入不可见字符,造成代码无法运行. 本次代码中就需要了不可见的" M-BM- " 问 ...
- 使用spark访问hive错误记录
在spark集群中执行./spark-shell时报以下错误: 18/07/23 10:02:39 WARN DataNucleus.Connection: BoneCP specified but ...