Httpd 常见配置1
官方帮助:http://httpd.apache.org/docs/2.4/
- httpd配置文件的组成:
(1)Global Environment
(2)Main server configuration
(3)virtual host - 配置格式:
directive value
directive
不区分字符大小写
value
为路径时,是否区分大小写,取决于文件系统 - 这些配置文件:
(1)/etc/httpd/conf/httpd.conf
(2)/etc/httpd/conf.d/*.conf
1、显示服务器版本信息 |
ServerTokens 选项
选项 | 显示效果 |
---|---|
Prod[uctOnly] | Server: Apache |
Major | Server: Apache/2 |
Minor | Server: Apache/2.0 |
Min[imal] | Server: Apache/2.0.41 |
OS | Server: Apache/2.0.41 (Unix) |
Full (or not specified) | Server: Apache/2.0.41 (Unix) PHP/4.2.2 MyMod/1.2 |
curl测试:
#包含http的头部信息
curl -i http://192.168.99.101
#只含http的头部信息
curl -I http://192.168.99.101
2、修改监听的IP和Port |
(1) 省略IP表示为本机所有IP
(2) Listen指令至少一个,可重复出现多次
示例:
Listen 192.168.1.100:8080
Listen 80
3、持久连接 |
Persistent Connection:连接建立,每个资源获取完成后不会断开连接,而是继续等待其它的请求完成,默认关闭持久连接
断开条件:时间限制:以秒为单位, 默认5s,httpd-2.4 支持毫秒级
设置:
KeepAlive On|Off
KeepAliveTimeout 15
测试:
#如果时间过短,命令没敲完就断开了
telnet 192.168.99.101 80
GET /URL HTTP/1.1
Host: 2.2.2.2
4、DSO: Dynamic Shared Object |
加载动态模块配置,不需重启即生效
示例:
#模块文件路径可使用相对路径:相对于ServerRoot(默认/etc/httpd)
#配置指定实现模块加载格式:
#LoadModule <mod_name> <mod_path>
LoadModule auth_basic_module modules/mod_auth_basic.so
动态模块路径: /usr/lib64/httpd/modules/
查看静态编译的模块: httpd -l
查看静态编译及动态装载的模块: httpd –M
5、MPM: Multi-Processing Module 多路处理模块 |
切换使用的MPM
#启用要启用的MPM相关的LoadModule指令即可
#prefork, worker, event都在这这配置文件里
vim /etc/httpd/conf.modules.d/00-mpm.conf
prefork的配置示例:
StartServers 8
MinSpareServers 5
#最少空闲进程
MaxSpareServers 20
#最多空闲进程
ServerLimit 256
#最多进程数,最大20000
MaxRequestsPerChild 4000
#子进程最多能处理的请求数量。
#在处理MaxRequestsPerChild 个请求之后,子进程将会被父进程终止
#这时候子进程占用的内存就会释放(为0时永远不释放)
worker的配置示例:
ServerLimit 16
StartServers 2
MaxRequestWorkers 150
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
测试
ab -c 1000 -n 2000 http://192.168.99.101/m.txt
#-c是并发,-n是发起几次
6、定义主页的文档页面路径 |
文档路径映射:
DocumentRoot指向的路径为URL路径的起始位置
示例:
DocumentRoot "/data/html"
#httpd-2.4以上需要加下面这段
<Directory "/data/html">
Require all granted
</Directory>
7、定义站点主页面 |
<IfModule dir_module>
DirectoryIndex abc.txt index.html
</IfModule>
#先找abc.txt再找index.html
8、站点访问控制常见机制 |
可基于两种机制指明对哪些资源进行何种访问控制
访问控制机制有两种:客户端来源地址,用户账号
==文件系统路径:==
#针对某个目录
<Directory "/path">
...
</Directory>
#针对某个文件
<File "/path/file"> #可以用通配符
...
</File>
#针对某些文件,正则表达式
<FilesMatch "PATTERN">
...
</FilesMatch>
==URL路径:==
<Location "/status">
...
</Location>
<LocationMatch "/(extra|special)/data">
...
</LocationMatch>
9、"< Directory >"中"基于源地址"实现访问控制 |
(1) Options
:后跟1个或多个以空白字符分隔的选项列表
在选项前的+
,-
表示增加或删除指定选项
常见选项 | 说明 |
---|---|
Indexes | 指明的URL路径下不存在与定义的主页面资源相符的资源文件时,返回索引列表给用户 |
FollowSymLinks | 允许访问符号链接文件所指向的源文件 |
None | 全部禁用 |
All | 全部允许 |
示例:
<Directory "/web/docs">
Options Indexes FollowSymLinks
</Directory>
#例2
<Directory "/web/docs/spec">
Options FollowSymLinks
</Directory>
(2) AllowOverride
与访问控制相关的哪些指令可以放在指定目录下的.htaccess(由AccessFileName指定)文件中,覆盖之前的配置指令
示例:
vim /data/html
<Directory "/data/html">
AllowOverride All
#.htaccess 中所有指令都有效
</Directory>
还可以写
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
#拒绝 HOSTNAME:
FQDN
#特定主机
domin.tld
#指定域名下的所有主机
不能有失败,失败优先
<RequireAll>
Require all granted
Require not ip 172.16.1.1
#拒绝特定IP
</RequireAll>
多个语句有一个成功,则成功,即成功优先
<RequireAny>
Require all denied
require ip 172.16.1.1
#允许特定IP
</RequireAny>