httpd简介

HTTP服务器简介
http服务器程序
httpd Apache
nginx
lightttpd
httpd介绍
特性:
高度模块化:Core+Modules
DSO:Dynamic Shared Ojbect动态加/卸载
MPM:Multi-processing Module多路处理模块
虚拟主机:IP,Port,FQDN
CGI:通用网关接口
反向代理(和正向代理的区别:正向代理距离客户端近,加速客户端的访问速度;反向代理距离服务器近,可以做调度,把client的请求转发到websrv集群中的某一个client<--->proxy(cache)<--->reverse proxy<--->websrv1,websrv2,sebsrnv)
负载均衡
路径别名
双向认证
支持第三方模块
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发行版,稳定,建议使用

编译:定制或特殊需求

httpd配置文件的组成
配置格式:directive value

grep "^[^ #]" /etc/httpd/conf/httpd.conf

各个配置参数的用法,见管网http://httpd.apache.org/docs/2.4/mod/quickreference.html

httpd几个主要配置:

welcome.conf
/etc/httpd/conf.d/welcome.conf 此文件是访问网站找不到主页时显示的默认页面

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.d/user.conf,增加

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

多端口支持
在上述的user.conf中,增加

Listen 8080

如果更改默认的80为别的端口,需要更改主配置文件httpd.conf的Listen为不同的端口,同时Listen可以绑定特定IP,如Listen 12.34.56.78:80

持久连接
KeepAlive默认是on,时间是5秒。

KeepAliveTimeout 50 设置为50秒

MaxKeepAliveRequests 100

用telnet测试:

[root@wwwCentOS6 ~]# telnet 172.20.42.145 80
Trying 172.20.42.145...
Connected to 172.20.42.145.
Escape character is '^]'.
GET /index.html HTTP/1.1
HOST: 6.6.6.6

具体待久连接的时间设置需要看具体的业务需求。断开连接由KeepAliveTimeout和MaxKeepAliveRequests两个参数一起作用,只要其中有一个达到设定值就触发断开。

MPM( Multi-Processing Module)多路处理模块
00-mpm.conf

默认是LoadModule mpm_prefork_module modules/mod_mpm_prefork.so

压力测试工具:ab -c 100 -n 1000 http://IP

DSO:Dynamic Shared Object
http -M动态模块查看

modules -> ../../usr/lib64/httpd/modules模块存放路径

增加默认的进程和线程数量
StartServers 20

StartThreads

要根据工作模型来设置,如prefork模式不支持线程

定义'Main' server的文档页面路径
DocumentRoot “/path”

CentOS7下,必须开放此文件夹的权限才可以访问

DocumentRoot "/data/website"
<Directory "/data/website">
Require all granted

定义站点主页面
DirectoryIndex index.html index.html.var

可以是软链接

mkdir -p /app/sports/

echo sports > /app/sports/index.html

在/data/website

ln -s /app/sports/ sports

访问http://ip/sports

站点访问控制常见机制
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>

猜你喜欢

转载自www.cnblogs.com/liangjindong/p/9230857.html