httpd简介
http服务器程序
httpd Apache
nginx
lightttpd
httpd介绍
特性:
1. ⾼度模块化:Core+Modules
2. DSO:Dynamic Shared Ojbect动态加/卸载
3. MPM:Multi-processing Module多路处理模块
4. 虚拟主机:IP,Port,FQDN
5. CGI:通⽤⽹关接⼝
6. 反向代理(和正向代理的区别:正向代理距离客户端近,加速客户端的访问速度;反向代理距离服务器近,可以做调度,把client的请求转发到websrv集中的某⼀个client<--->proxy(cache)<--->reverse proxy<--->websrv1,websrv2,sebsrnv)
7. 负载均衡
8. 路径别名
9. 双向认证
10. ⽀持第三⽅模块
MPM⼯作模式:
### prefork:多进程I/O模型,每个进程响应⼀个请求,默认模型
⼀个主进程:⽣成和回收n个⼦进程,创建套接字,不响应请求
多个⼦进程:⼯作work进程,每个⼦进程处理⼀个请求;系统初始时,预先⽣成多个空闲进程,等待
请求,最⼤不超过1024个(原因是 ulimit -a:open files 1024)
### worker:复⽤的多进程I/O模型,多进程多线程,IIS使⽤此模型
⼀个主进程:⽣成m个⼦进程,每个⼦进程负责⽣个n个线程,每个线程响应⼀个请求,并发响应请求:m*n
### event:事件驱动模型(worker模型的变种)
⼀个主进程:⽣成m个⼦进程,每个进程直接响应n个请求,并发响应请求:m*n,有专门的线程来管理这些keep-alive类型的线程,当有真实请求时,将请求传递给服务线程,执⾏完毕后,⼜允许释放。这样增强了⾼并发场景下的请求处理能⼒在⽀持MPM⼯作模式上,不同的httpd版本不同的⽅式:
httpd-2.2版本,有不同的⼆进制程序:
/usr/sbin/httpd
/usr/sbin/httpd.event
/usr/sbin/httpd.worker
httpd-2.4版本,有不同的模块来⽀持,好处是动态加载,不需要更换⼆进制执⾏程序,不⽤时可以动态卸载:
/usr/lib64/httpd/modules/mod_mpm_event.so
/usr/lib64/httpd/modules/mod_mpm_worker.so
/usr/lib64/httpd/modules/mod_mpm_prefork.so
httpd安装
版本:
CentOS6:2.2
CentOS7:2.4
安装⽅式
rpm:centos发⾏版,稳定,建议使⽤
编译:定制或特殊需求
nginx和apache区别httpd配置⽂件的组成
配置格式:directive value
grep "^[^ #]" /etc/httpd/f
各个配置参数的⽤法,见管⽹/docs/2.4/mod/quickreference.html
httpd⼏个主要配置:
1. f
/etc/httpd/conf.f 此⽂件是访问⽹站不到主页时显⽰的默认页⾯
2. servertoken
默认是full,有安全隐患,通过浏览器的debug模式可以看到apache的详细版本,如下图:
[root@wwwCentOS6 ~]# curl -I 172.20.42.145
HTTP/1.1 200 OK
Date: Thu, 21 Jun 2018 11:41:27 GMT
Server: Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips PHP/5.4.16
Last-Modified: Wed, 20 Jun 2018 07:59:30 GMT
ETag: "12-56f0e2db429bf"
Accept-Ranges: bytes
Content-Length: 18
Content-Type: text/html; charset=UTF-8
新建/etc/httpd/conf.f,增加
Servertokens prod
[root@wwwCentOS6 ~]# curl -I 172.20.42.145
HTTP/1.1 200 OK
Date: Thu, 21 Jun 2018 11:43:16 GMT
Server: Apache
Last-Modified: Wed, 20 Jun 2018 07:59:30 GMT
ETag: "12-56f0e2db429bf"
Accept-Ranges: bytes
Content-Length: 18
Content-Type: text/html; charset=UTF-8
3. 多端⼝⽀持
在上述的f中,增加
Listen 8080
如果更改默认的80为别的端⼝,需要更改主配置⽂件f的Listen为不同的端⼝,同时Listen可以绑定特定IP,如Listen 12.34.56.78:80
4. 持久连接
KeepAlive默认是on,时间是5秒。
KeepAliveTimeout 50 设置为50秒
MaxKeepAliveRequests 100
⽤telnet测试:
[root@wwwCentOS6 ~]# telnet 172.20.42.145 80
Trying 172.20.
Connected to 172.20.42.145.
Escape character is '^]'.
GET /index.html HTTP/1.1
HOST: 6.6.6.6
注意:具体待久连接的时间设置需要看具体的业务需求。断开连接由KeepAliveTimeout和MaxKeepAliveRequests两个参数⼀起作⽤,只要其中有⼀个达到设定值就触发断开。
5. 增加默认的进程和线程数量
StartServers 20
StartThreads
要根据⼯作模型来设置,如prefork模式不⽀持线程
6. 定义'Main' server的⽂档页⾯路径
DocumentRoot “/path”
CentOS7下,必须开放此⽂件夹的权限才可以访问
DocumentRoot "/data/website"
<Directory "/data/website">
Require all granted
7.
8. 站点访问控制常见机制
Require ip IPADDR:授权指定来源的IP访问
Require not ip IP:拒绝特定的主机访问
在http2.2中
order deny,allow (allow的优先级⼤于deny,后⾯的优先级⾼)
allow from 192.168.30.6
deny from 192.18.30.0/24
另外,对于某些特定,设置⽆法访问,如下禁⽌访问所有.conf结尾的配置⽂件。
<Files ".conf">
Require all denied
或者
<Filesmatch "..(conf|ini)$">
Require all denied
还有如某⼀个配置的⽂件夹下的所有⽂件都设定访问权限:
<location /conf>
Require all granted
Require not ip 172.20.42.144
如上的例⼦是不允许172.20.42.144访问。
<location /conf>
Require all denied
require ip 172.16.1.1 允许特定IP
<location /conf>
如上的例⼦是只允许172.16.1.1访问。
<File "*.conf">
Require all denied
如上例⼦是不允许任何⼈访问.conf的⽂件,客户端访问会出现 403 Forbidden.
<Filesmatch ".*.(conf|ini)$">
Require all denied
filesmatch和files同样的功能,⽀持正则表达式。
另外,上述的Directory,Location,File,Filematch配置能够防⽌/conf下的配置⽂件被所有⽤户访问,以防⽌⼀些配置⽂件如mysql的⽤户名和密码泄露给互联⽹⽤户。
9. Options设置,可以设置某个Directory下的访问权限
如下配置禁⽌软链接的访问:
<Directory "/var/www/html">
options -FollowSymLinks
Require all granted
如下配置可以在没有index.html情况下显⽰所有⽂件列表,应⽤情型如阿⾥云的repository,显⽰⽂件夹索引
<Directory "/var/www/html">
options +indexes -FollowSymLinks
Require all granted
10. AllowOverride
AllowOverride optitions=FollowSymLinks
11.
12. 定义路径别名
未完待续
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论