一、程序文件组成
CentOS 7程序环境:yum安装httpd-2.4
官方帮助文档:http://httpd.apache.org/docs/2.4/
配置文件:
/etc/httpd/conf/httpd.conf
/etc/httpd/conf.d/*.conf
检查配置文件语法:
httpd –t
服务单元文件: /usr/lib/systemd/system/httpd.service
配置文件:/etc/sysconfig/httpd
服务控制和启动:
systemctl enable|disable httpd.service
systemctl {start|stop|restart|status|reload} httpd.service
站点网页文档根目录:
/var/www/html
模块文件路径:
/etc/httpd/modules #下面文件的软连接
/usr/lib64/httpd/modules
主程序文件:
/usr/sbin/httpd
主进程文件:
/etc/httpd/run/httpd.pid
日志文件目录:
/var/log/httpd
access_log: 访问日志
error_log:错误日志
帮助文档包:
httpd-manual
二、配置讲解
1、显示服务器版本信息
ServerTokens Major|Minor|Min[imal]|Prod[uctOnly]|OS|Full #各种类型
http://httpd.apache.org/docs/2.4/mod/core.html#servertokens 各种类型的格式
vi /etc/httpd/conf.d/test.conf
ServerTokens Prod # 建议使用
2、修改监听的IP和port
Listen [IP:]PORT
(1) 省略IP表示为本机所有IP
(2) Listen指令至少一个,可重复出现多次
Listen 80
Listen 8080
3、持久连接
Persistent Connection:连接建立,每个资源获取完成后不会断开连
接,而是继续等待其它的请求完成,默认关闭持久连接
断开条件:时间限制:以秒为单位, 默认5s,httpd-2.4 支持毫秒级
副作用:对并发访问量大的服务器,持久连接会使有些请求得不到响应
折中:使用较短的持久连接时间
设置:KeepAlive On|Off
KeepAliveTimeout 15
模拟测试:telnet 192.168.12.27 80
GET /URL HTTP/1.1
Host: 192.168.12.27
4、
DSO: Dynamic Shared Object
加载动态模块配置,不需重启即生效
/etc/httpd/conf/httpd.conf
Include conf.modules.d/*.conf
httpd -M #查看所有模块,如果需要注释对应模块即可
httpd -l #查看静态模块,核心模块
添加模块示例:LoadModule auth_basic_module modules/mod_auth_basic.so
5、MPM( Multi-Processing Module)多路处理模块
prefork, worker, event
切换使用的MPM(centos6中不能)
/etc/httpd/conf.modules.d/00-mpm.conf
启用要启用的MPM相关的LoadModule指令即可
prefork的配置: (默认使用)一个进程下面有若干子进程,由子进程提供服务,默认4个子进程,现有进程不够用会自动开启
vi /etc/httpd/conf.d/test.conf
StartServers 8 #初始子进程建议调大
MinSpareServers 5
MaxSpareServers 20
ServerLimit 256 最多进程数,最大值 20000 preforw模式下最大200000
MaxClients 256 最大的并发连接数,2.4官方文档没有说明,2.2中有,不加的话子进程数不会改变
MaxRequestsPerChild 4000 子进程最多能处理的请求数量。在处理MaxRequestsPerChild 个
请求之后,子进程将会被父进程终止,这时候子进程占用的内存就会释放(为0时永远不释放)
worker的配置: 一个进程下面若干子进程,由子进程下面的线程提供服务,
ServerLimit 16
StartServers 2
MaxRequestWorkers 150
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
event MPM单线程响应多请求,占据更少的内存,高并发下表现更优秀,会有一个专门的线
程来管理keep-alive类型的线程
6、定义'Main' server的文档页面路径
DocumentRoot “/path”
文档路径映射:
DocumentRoot指向的路径为URL路径的起始位置
示例:
DocumentRoot "/data/html“ 2.4版本只改这一行不行,需要授权,2.2可以直接修改
Require all granted
文件是软连接,在其他目录也可以访问
7、定义站点主页面
DirectoryIndex index.html index.php
8、站点访问控制常见机制
可基于两种机制指明对哪些资源进行何种访问控制
访问控制机制有两种:客户端来源地址,用户账号
文件系统路径:
...
...
...
require all denied
require ip 192.168.12.1 192.168.12.27
SetHandler server-status
9、
(1) Options:后跟1个或多个以空白字符分隔的选项列表
在选项前的+,- 表示增加或删除指定选项
常见选项:
Indexes:指明的URL路径下不存在与定义的主页面资源相符的资源文件时,返回索引列表给用户
FollowSymLinks:允许访问符号链接文件所指向的源文件
None:全部禁用
All: 全部允许
(2) AllowOverride
与访问控制相关的哪些指令可以放在指定目录下的.htaccess(由AccessFileName指定)文件中,覆盖之前的配置指令
只对
AllowOverride All: .htaccess中所有指令都有效
AllowOverride None: .htaccess 文件无效
AllowOverride AuthConfig .htaccess 文件中,除了AuthConfig 其它指令都无法生效
(3) 基于IP的访问控制:
无明确授权的目录,默认拒绝
允许所有主机访问:Require all granted
拒绝所有主机访问:Require all denied
控制特定的IP访问:
Require ip IPADDR:授权指定来源的IP访问
Require not ip IPADDR:拒绝特定的IP访问
控制特定的主机访问:
Require host HOSTNAME:授权特定主机访问
Require not host HOSTNAME:拒绝
不能有失败,至少有一个成功匹配才成功,即失败优先
Require all granted
Require not ip 172.16.1.1 拒绝特定IP
多个语句有一个成功,则成功,即成功优先
Require all denied
require ip 172.16.1.1 允许特定IP
10、日志设定
日志类型:访问日志、错误日志
错误日志:
ErrorLog logs/error_log
LogLevel warn
LogLevel 可选值: debug, info, notice, warn,error, crit, alert, emerg
访问日志:
定义日志格式:LogFormat format strings
LogFormat "%h %l %u %{%F %T}t \"%r\" %>s %b \"%{Referer}i\"
\"%{User-Agent}i\"" testlog
使用日志格式:
CustomLog logs/access_log testlog
http://httpd.apache.org/docs/2.4/mod/mod_log_config.html#formats 官方帮助文档
11、设定默认字符集
AddDefaultCharset UTF-8 此为默认值
中文字符集:GBK, GB2312, GB18030
基于模块mod_userdir.so实现
相关设置:
12、实现家目录共享
vim /etc/httpd/conf.d/userdir.conf 修改该文件即可
#UserDir disabled
UserDir public_html #指定共享目录的名称
准备目录
su – sun;mkdir ~/public_html
echo homesun > ~/sun/public_html/index.html
setfacl –m u:apache:x ~sun
访问
13、status页面
LoadModule status_module modules/mod_status.so
SetHandler server-status
ExtendedStatus On 显示扩展信息