httpd
httpd简介
httpd是Apache超文本传输协议(HTTP)服务器的主程序。被设计为一个独立运行的后台进程,它会建立一个处理请求的子进程或线程的池。
通常,httpd不应该被直接调用,而应该在类Unix系统中由apachectl调用,在Windows中作为服务运行。
httpd常用版本
- httpd-2.2:https://centos.pkgs.org/6/centos-i386/httpd-2.2.15-69.el6.centos.i686.rpm.html
- httpd-2.4:https://centos.pkgs.org/8/centos-appstream-aarch64/httpd-2.4.37-21.module_el8.2.0+382+15b0afa8.aarch64.rpm.html
长连接和短连接
- 长连接和短连接的定义
- 长连接:可以省去较多的TCP建立和关闭的操作,减少浪费,节约时间。对于频繁请求资源的客户来说,较适用长连接。不过这里存在一个问题,存活功能的探测周期太长,还有就是它只是探测TCP连接的存活,属于比较斯文的做法,遇到恶意的连接时,保活功能就不够使了。在长连接的应用场景下,client端一般不会主动关闭它们之间的连接,Client与server之间的连接如果一直不关闭的话,会存在一个问题,随着客户端连接越来越多,server早晚有扛不住的时候,这时候server端需要采取一些策略,如关闭一些长时间没有读写事件发生的连接,这样可以避免一些恶意连接导致server端服务受损;如果条件再允许就可以以客户端机器为颗粒度,限制每个客户端的最大长连接数,这样可以完全避免某个客户端连累后端服务
- 短链接:将数据一点点进行传输短连接对于服务器来说管理较为简单,存在的连接都是有用的连接,不需要额外的控制手段。但如果客户请求频繁,将在TCP的建立和关闭操作上浪费时间和带宽。
长连接短连接操作过程
- 短连接的操作步骤是:
建立连接——数据传输——关闭连接…建立连接——数据传输——关闭连接 - 长连接的操作步骤是:
建立连接——数据传输…(保持连接)…数据传输——关闭连接
httpd特性
- 2.2版本
-
事先创建进程
-
按需维持适当的进程模块化设计,核心比较小,各种功能通过模块添加(包括PHP),支持运行时配置,支持单独编译模块
-
支持多种方式的虚拟主机配置,如基于ip的虚拟主机,基于端口的虚拟主机,基于域名的虚拟主机等
-
支持https协议(通过mod_ssl模块实现)
-
支持用户认证
-
支持基于IP或域名的ACL访问控制机制
-
支持每目录的访问控制(用户访问默认主页时不需要提供用户名和密码,但是用户访问某特定目录时需要提供用户名和密码)
-
支持URL重写
-
支持MPM(Multi Path Modules,多处理模块)。用于定义httpd的工作模型(单进程、单进程多线程、多进程、多进程单线程、多进程多线程)
- 2.4版本新特性
- MPM支持运行DSO机制(Dynamic Share Object,模块的动态装/卸载机制),以模块形式按需加载
- 支持event MPM,eventMPM模块生产环境可用
- 支持异步读写
- 支持每个模块及每个目录分别使用各自的日志级别
- 每个请求相关的专业配置,使用来配置
- 增强版的表达式分析器
- 支持毫秒级的keepalive timeout
- 基于FQDN的虚拟主机不再需要NameVirtualHost指令
- 支持用户自定义变量
- 支持新的指令(AllowOverrideList)
- 降低对内存的消耗
httpd的工作模式
工作模式 | 模式内容 |
---|---|
prefork | 多进程模式,预先生成进程,一个请求用一个进程响应 |
worker | 基于线程工作,一个请求用一个线程响应(启动多个京城,每个进程生成多个线程) |
event | 基于时间的驱动,一个进程处理多个请求 |
httpd工作模块更改
- 编辑模块配置文件
[root@Yukino ~]# vim /etc/httpd/conf.modules.d/00-mpm.conf
#LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
#LoadModule mpm_worker_module modules/mod_mpm_worker.so
LoadModule mpm_event_module modules/mod_mpm_event.so
注意
:三个模块只能用一个;选择其中一个模块后需要将其他两个模块进行注释;更改后重启服务
httpd-2.4新增模块
模块 | 功能 |
---|---|
mod_proxy_fcgi | 反向代理时支持apache服务器后端协议的模块 |
mod_ratelimit | 提供速率限制功能的模块 |
mod_remoteip | 基于ip的访问控制机制被改变,不再支持使用Order,Deny,Allow来做基于IP的访问控制 |
httpd基础
工具 | 功能 |
---|---|
htpasswd | basic认证基于文件实现时,用到的账号密码生成工具 |
apachectl | httpd自带的服务控制脚本,支持start,stop,restart |
apxs | 由httpd-devel软件包提供的,扩展httpd使用第三方模块的工具 |
rotatelogs | 日志滚动工具(按天生成日志、按大小生成日志) |
serxec | 访问某些有特殊权限的配置资源时,历史切换至指定用户运行的工具 |
ab | apache benchmark,httpd的压力测试工具 |
rpm包安装的httpd程序环境
文件/目录 | 对应的功能 |
---|---|
/var/log/httpd/access.log | 访问日志 |
/var/log/httpd/error_log | 错误日志 |
/var/www/html | 站点文档目录 |
/usr/lib64/httpd/modules | 模块文件路径 |
/etc/httpd/conf/httpd.conf | 主配置文件 |
/etc/httpd/conf.modules.d/*.conf | 模块配置文件 |
/etc/httpd/conf.d/*.conf | 辅助配置文件、 |
httpd的安装步骤
- 源码安装httpd
源码安装httpd安装步骤 - yum安装httpd
- 搭建YUM本地仓库
本地YUM仓库搭建步骤 - 安装httpd
[root@localhost ~]# yum install -y httpd
[root@localhost ~]# systemctl start httpd
[root@localhost ~]# systemctl status httpd
● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.servic>
Active: active (running) since Mon 2020-08-24 21:00:>
Docs: man:httpd.service(8)
Main PID: 991 (httpd)
Status: "Total requests: 2; Idle/Busy workers 100/0;>
Tasks: 278 (limit: 11340)
Memory: 51.3M
CGroup: /system.slice/httpd.service
├─ 991 /usr/sbin/httpd -DFOREGROUND
├─1167 /usr/sbin/httpd -DFOREGROUND
├─1168 /usr/sbin/httpd -DFOREGROUND
├─1169 /usr/sbin/httpd -DFOREGROUND
├─1170 /usr/sbin/httpd -DFOREGROUND
└─1765 /usr/sbin/httpd -DFOREGROUND
Aug 24 20:59:57 localhost.localdomain systemd[1]: Start>
Aug 24 21:00:02 localhost.localdomain systemd[1]: Start>
Aug 24 21:00:02 localhost.localdomain httpd[991]: Serve>
lines 1-19/19 (END)
web相关命令
curl命令
curl支持以下功能:
- https认证
- http的POST/PUT等方法
- ftp上传
- kerberos认证
- http上传
- 代理服务器
- cookies
- 用户名/密码认证
- 下载文件断点续传
- socks5代理服务器
- 通过http代理服务器上传文件到ftp服务器
语法:curl [option] [URL]
option
-A/--user-agent #设置用户代理发送给服务器
-basic #使用http基本认证
--tcp-nodelay #使用TCP_NODELAY选项
-e/--referer <URL> #来源网络
--cacert <file> #CA证书(SSL认证)
--compressed #要求返回时压缩的格式
-H/--header <line> #自定义请求首部信息传递给服务器
-I/--head #只显示响应报文首部信息
--limit-rate <rate> #设置传输速度
-u/--user <user[:password]> #设置服务器的用户和密码
-0/--http1 #使用http 1.0版本,默认使用1.1版本。这个选项是数字0而不是字母o
-o/--output #把输出写到文件中
访问网站:curl http://localhost/wcl/index.html
[root@Yukino wcl]# curl http://localhost/wcl/index.html
七夕节快乐
(快乐都是别人的,你像个孤独患者自我拉扯)
下载:curl -o baidu.html https://www.baidu.com
[root@localhost ~]# curl -o baidu.html https://www.baidu.com
#baidu.html:本地名称;可写成绝对路径放到其他目录中
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --100 2443 100 2443 0 0 18231 0 --:--:-- --:--:-- --:--:-- 18231
[root@localhost ~]# ll
total 8
-rw-------. 1 root root 1205 Aug 24 2020 anaconda-ks.cfg
-rw-r--r-- 1 root root 2443 Aug 24 03:42 baidu.html
下载软件:curl -o /绝对路径/文件名 软件包URL
[root@Yukino ~]# curl -o /root/share/httpd-2.4.37-21.module_el8.2.0+382+15b0afa8.aarch64.rpm https://centos.pkgs.org/8/centos-appstream-aarch64/httpd-2.4.37-21.module_el8.2.0+382+15b0afa8.aarch64.rpm.html
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- - 0 0 0 0 0 0 0 0 --:--:-- - 0 0 0 0 0 0 0 0 --:--:-- 0 0 0 0 0 0 0 0 --:--:-- 0 0 0 0 0 0 0 0 --:--:-- 0 0 0 0 0 0 0 0 --:--:-- 0 0 0 0 0 0 0 0 --:--:-- 0 0 0 0 0 0 0 0 --:--:-- 0 4840 0 0 0 0 0 0 --:--:-- 100 4840 100 4840 0 0 632 0 0:00:07 0:00:07 --:--:-- 1155
[root@Yukino ~]# echo $?
0
[root@Yukino ~]# ll /root/share/
total 8
-rw-r--r-- 1 root root 4840 Aug 25 03:22 httpd-2.4.37-21.module_el8.2.0+382+15b0afa8.aarch64.rpm
httpd命用的options:
- option
-l #查看静态编译的模块,列出核心中编译了哪些模块。
#它不会列出使用LoadModule指令动态加载的模块
-M #输出一个已经启用的模块列表,包括静态编译在服务器中的模块和作为DSO动态加载的模块
-v #显示httpd的版本,然后退出
-V #显示httpd和apr/apr-util的版本和编译参数,然后退出
-X #以调试模式运行httpd。仅启动一个工作进程,并且服务器不与控制台脱离
-t #检查配置文件是否有语法错误
httpd -l
[root@Yukino ~]# httpd -l
Compiled in modules:
core.c
mod_so.c
http_core.c
httpd -M
[root@Yukino ~]# httpd -M
Loaded Modules:
core_module (static)
so_module (static)
http_module (static)
access_compat_module (shared)
actions_module