本文针对的是Server version: Apache/2.4.6 (CentOS)
1 httpd 命令
[root@node-43-200 ~]#httpd -h
Usage: httpd [-D name] [-d directory] [-f file]
[-C "directive"] [-c "directive"]
[-k start|restart|graceful|graceful-stop|stop]
[-v] [-V] [-h] [-l] [-L] [-t] [-T] [-S] [-X]
Options:
-D name : define a name for use in <IfDefine name> directives
-d directory : specify an alternate initial ServerRoot
-f file : specify an alternate ServerConfigFile
-C "directive" : process directive before reading config files
-c "directive" : process directive after reading config files
-e level : show startup errors of level (see LogLevel)
-E file : log startup errors to file
-v : show version number
-V : show compile settings
-h : list available command line options (this page)
-l : list compiled in modules
-L : list available configuration directives
-t -D DUMP_VHOSTS : show parsed vhost settings
-t -D DUMP_RUN_CFG : show parsed run settings
-S : a synonym for -t -D DUMP_VHOSTS -D DUMP_RUN_CFG
-t -D DUMP_MODULES : show all loaded modules
-M : a synonym for -t -D DUMP_MODULES
-t : run syntax check for config files
-T : start without DocumentRoot(s) check
-X : debug mode (only one worker, do not detach)
2 配置文件规则及常见指令
httpd核心是配置文件,各种功能都是都过配置文件来实现。使用yum安装的默认主配置文件主要分为几类:
├── conf
│ ├── httpd.conf
│ └── magic
├── conf.d
│ ├── autoindex.conf
│ ├── README
│ ├── userdir.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
接下来按照以上目录详细说明各个模块的作用。
2.1 httpd.conf 主配置文件
本文按照apache http主配置文件内容顺序逐条讲解。它包含给服务器指令的配置指令;更多的信息参考官方文档
配置和日志文件的命名:如果为服务器显示的用“/”指明路径,则用的是绝对路径,如果没有“/”,用的则是相对路径。
ServerRoot "/etc/httpd"
定义了配置文件、错误日志等目录的根,配置文件中的指令值的相对路径都是以该目录为参考点。
不要在目录路径的末尾添加斜线。如果将serverroot指向非本地磁盘,请确保在mutex指令中指定一个本地磁盘(如果使用基于文件的互斥)。如果希望为多个httpd守护进程共享同一个serverroot,则至少需要更改pidfile。
Listen 80
Listen 192.168.100.100:8080
Listen 指定一个IP或者端口来代替默认的80端口,端口,ip可以监听多个。
Include conf.modules.d/*.conf
Include 指明加载模块,所有该目录下的conf文件指定的模块都会加载。此处是加载模块的总领,具体可以在conf.modules.d/目录下修改
httpd启动时候会自动解析配置文件,并在多出的解析中对重复项目进行合并,支持通配符*?[].include 指令值可以使用相对路径也可以使用绝对路径。如果include包含的文件不存在时,将报错。这时可以使用 IncludeOptional 指令进行加载,这表示存在则加载,不存在就算了
User apache
Group apache
指定以哪个用户,哪个组来运行httpd程序,因为不用的用户、组对系统的文件系统有不同的访问权限。
ServerAdmin root@localhost.com
定义管理员邮箱,在某些自动生成的错误页面中可能会使用该邮箱,展示给客户端。
#ServerName www.example.com:80
用于唯一标识提供web服务的主机名,只有在基于名称的虚拟主机中该指令才是必须提供的。也就是说,如果不是在基于名称的虚拟主机中,可以任意指定该指令的值,只要你认为它能唯一标识你的主机。但如果不设置该指令,那么httpd在启动时,将会反解操作系统的IP地址
此项是默认关闭,一般服务程序会自动标明,但是我们也可以手动指定,防止程序启动时候出现问题。如果没有注册的DNS域名,可以输入IP地址
<Directory />
AllowOverride none
Require all denied
</Directory>