HTTP服务器应用(安装/MPM介绍)
HTTP 服务器程序应用程序服务器HTTPD 介绍HTTPD 诞生HTTPD 特性
MPM 工作模式preforkworkerevent
HTTPD 功能特性安装 HTTPDCentOS 6:httpd-2.2配置文件服务脚本主程序文件日志文件站点文档模块文件路径服务控制和启动
CentOS 7:httpd-2.4httpd 2.4 的特性配置文件服务单元文件(systemd unit file)主程序文件日志文件站点文档模块文件路径服务控制语法检查帮助文档包配置应用
示例浏览器访问欢迎界面自制主页安装帮助手册登陆帮助网页
增加一个监听端口
HTTP 服务器程序
httpd apache:最稳定。经验最丰富
nginx
lighttpd
应用程序服务器
IIS .asp
tomcat .jsp
jetty 开源的servlet容器,基于Java的web容器
Resin CAUCHO公司,支持servlets和jsp的引擎
webshpere(IBM), weblogic(BEA), jboss,oc4j(Oracle
HTTPD 介绍
HTTPD 诞生
20世纪90年代初,国家超级计算机应用中心NCSA开发
1995年开源社区发布apache(a patchy server)
ASF: apache software foundation
FSF:Free Software Foundation
HTTPD 特性
高度模块化:core + modulesDSO: Dynamic Shared Object 动态加/卸载MPM:multi-processing module多路处理模块
MPM 工作模式
prefork
prefork:多进程模型,每个进程响应一个请求:
一个主进程:负责生成子进程及回收子进程;负责创建套接字;负责接收请求,并将其派发给某子进程进行处理n个子进程:工作work进程,每个子进程处理一个请求;系统初始时,预先生成多个空闲进程,等待请求,最大不超过1024个
worker
worker:多进程多线程模型,每线程处理一个用户请求
一个主进程:负责生成子进程;负责创建套接字;负责接收请求,并将其派发给某子进程进行处理多个子进程:每个子进程负责生成多个线程每个线程:负责响应用户请求并发响应数量:m*n
m:子进程数量n:每个子进程所能创建的最大线程数量
event
event:事件驱动模型,多进程模型,每个进程响应多个请求
一个主进程:生成m个子进程,每个进程直接响应n个请求,并发响应请求:m*n,有专门的线程来管理这些keep-alive类型的线程,当有真实请求时,将请求传递给服务线程,执行完毕后,又允许释放。这样增强了高并发场景下的请求处理能力
一个主进程 :负责生成子进程;负责创建套接字;负责接收请求,并将其派发给某子进程进行处理子进程:基于事件驱动机制直接响应多个请求
httpd-2.2: 仍为测试使用模型
httpd-2.4:event可生产环境中使用
)
HTTPD 功能特性
CGI:Common Gateway Interface 通用网关接口
虚拟主机:IP,PORT, FQDN
反向代理
负载均衡
路径别名
丰富的用户认证机制
basic
digest
支持第三方模块
安装 HTTPD
rpm包:CentOS 发行版中直接提供;
编译安装:定制新功能,或其它原因;
[root@Neo ~]# yum install httpd -y # 安装 httpd
[root@Neo ~]# yum info httpd # 查看 httpd 信息
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
Installed Packages
Name : httpd
Arch : x86_64
Version : 2.4.6
Release : 89.el7.centos
Size : 9.4 M
Repo : installed
From repo : updates
Summary : Apache HTTP Server
URL : http://httpd.apache.org/
License : ASL 2.0
Description : The Apache HTTP Server is a powerful, efficient, and extensible
: web server.
[root@Neo ~]# yum list all http* # 查看 httpd 安装包
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
Installed Packages
httpd.x86_64 2.4.6-89.el7.centos @updates
httpd-tools.x86_64 2.4.6-89.el7.centos @updates
[root@Neo ~]# systemctl status httpd.service # 查看 httpd 的状态
● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
Active: inactive (dead)
Docs: man:httpd(8)
man:apachectl(8)
[root@Neo ~]# systemctl start httpd.service # 启动 httpd 程序
[root@Neo ~]# systemctl status httpd.service # 查看 httpd 状态
● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
Active: active (running) since Sat 2019-08-03 11:33:20 EDT; 3s ago
Docs: man:httpd(8)
man:apachectl(8)
Main PID: 7470 (httpd)
Status: "Processing requests..."
CGroup: /system.slice/httpd.service
├─7470 /usr/sbin/httpd -DFOREGROUND
├─7471 /usr/sbin/httpd -DFOREGROUND
├─7472 /usr/sbin/httpd -DFOREGROUND
├─7473 /usr/sbin/httpd -DFOREGROUND
├─7474 /usr/sbin/httpd -DFOREGROUND
└─7475 /usr/sbin/httpd -DFOREGROUND
Aug 03 11:33:20 Neo systemd[1]: Starting The Apache HTTP Server...
Aug 03 11:33:20 Neo httpd[7470]: AH00558: httpd: Could not reliably determine ...ge
Aug 03 11:33:20 Neo systemd[1]: Started The Apache HTTP Server.
Hint: Some lines were ellipsized, use -l to show in full.
[root@Neo ~]# ss -tnl # 查看监听端口
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:22 *:*
LISTEN 0 100 127.0.0.1:25 *:*
LISTEN 0 128 :::80 :::*
LISTEN 0 32 :::21 :::*
LISTEN 0 128 :::22 :::*
LISTEN 0 100 ::1:25 :::*
CentOS 6:httpd-2.2
配置文件
/etc/httpd/conf/httpd.conf
/etc/httpd/conf.d/*.conf
服务脚本
/etc/rc.d/init.d/httpd
脚本配置文件:/etc/sysconfig/httpd
主程序文件
/usr/sbin/httpd
/usr/sbin/httpd.event
/usr/sbin/httpd.worker
日志文件
/var/log/httpd:
access_log:访问日志
error_log:错误日志
站点文档
/var/www/html
模块文件路径
/usr/lib64/httpd/modules
服务控制和启动
chkconfig httpd on|off
service {start|stop|restart|status|configtest|reload} httpd
CentOS 7:httpd-2.4
httpd 2.4 的特性
MPM支持运行为DSO机制;以模块形式按需加载event MPM生产环境可用异步读写机制支持每模块及每目录的单独日志级别定义每请求相关的专用配置增强版的表达式分析式毫秒级持久连接时长定义基于FQDN的虚拟主机不需要NameVirutalHost指令新指令,AllowOverrideList支持用户自定义变量更低的内存消耗
配置文件
/etc/httpd/conf/httpd.conf
/etc/httpd/conf.d/*.conf
# 模块化配置文件,如果需要添加内容,直接编辑新增 .conf 结尾的文件即可,不需要了直接删除即可
# 模块相关的配置文件:/etc/httpd/conf.modules.d/*.conf 模块的功能特性
服务单元文件(systemd unit file)
/usr/lib/systemd/system/httpd.service
主程序文件
/usr/sbin/httpd
httpd-2.4支持MPM的动态切换
日志文件
/var/log/httpd:
access_log:访问日志
error_log:错误日志
站点文档
/var/www/html
模块文件路径
/etc/httpd/modules
/usr/lib64/httpd/modules
服务控制
systemctl enable|disable httpd.service
systemctl {start|stop|restart|status} httpd.service\
语法检查
httpd –t
帮助文档包
httpd-manual
配置应用
切换使用的MPM:编辑配置文件/etc/httpd/conf.modules.d/00-mpm.conf,启用要启用的MPM相关的LoadModule指令即可。
访问控制:
第一种:基于IP的访问控制
允许所有主机访问 # Require all granted
拒绝所有主机访问 # Require all deny
控制特定的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.100.2
</RequireAll>
虚拟主机
<VirtualHost *:80>
ServerName www.b.net
DocumentRoot "/apps/b.net/htdocs"
<Directory "/apps/b.net/htdocs">
Options None
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
注意:任意目录下的页面只有显式授权才能被访问
可支持 https:http over ssl
支持毫秒级持久连接时长定义KeepAliveTimeout #ms
示例
浏览器访问欢迎界面
在安装完 httpd 服务后,用浏览器进行访问。 在没有主页的情况下,会显示欢迎界面。如下。
[root@Neo ~]# ip addr list | grep ens33 | grep inet
inet 192.168.1.10/24 brd 192.168.1.255 scope global noprefixroute dynamic ens33
自制主页
[root@Neo ~]# echo "Tang & Neo" > /var/www/html/index.html
安装帮助手册
[root@Neo ~]# yum install httpd-manual -y
安装完毕后,会生成一个 manual.conf文件。
[root@Neo ~]# ll /etc/httpd/conf.d/
total 20
-rw-r--r--. 1 root root 2926 Jul 29 13:18 autoindex.conf
-rw-r--r--. 1 root root 323 Jul 29 11:15 manual.conf
-rw-r--r--. 1 root root 366 Jul 29 13:19 README
-rw-r--r--. 1 root root 1252 Jul 29 11:15 userdir.conf
-rw-r--r--. 1 root root 824 Jul 29 11:15 welcome.conf
登陆帮助网页
安装完httpd的帮助手册后,会生成一个帮助网页。在此页面上,可以查看具体的使用帮助。如下:
增加一个监听端口
在 conf.d 目录下,新增一个 .conf 结尾的文件重启服务时,会加载所有 .conf 文件(主配置文件中IncludeOptional conf.d/*.conf代表加载所有 .conf文件)然后再重启httpd 服务,就会发现多了一个监听端口如果不需要了的话,直接删除此文件,然后在重启 httpd 服务即可修改网页内容的话是不需要重启 httpd 服务的修改网页名称的话是需要重启 httpd 服务的
[root@Neo ~]# ll /etc/httpd/conf.d/
total 24
-rw-r--r--. 1 root root 2926 Jul 29 13:18 autoindex.conf
-rw-r--r--. 1 root root 323 Jul 29 11:15 manual.conf
-rw-r--r--. 1 root root 366 Jul 29 13:19 README
-rw-r--r--. 1 root root 13 Aug 3 12:24 test.conf
-rw-r--r--. 1 root root 1252 Jul 29 11:15 userdir.conf
-rw-r--r--. 1 root root 824 Jul 29 11:15 welcome.conf
[root@Neo ~]# cat /etc/httpd/conf.d/test.conf # 新增一个 .conf 文件
Listen 10080
[root@Neo ~]# httpd -t # 语法检测
Syntax OK
[root@Neo ~]# systemctl restart httpd.service
[root@Neo ~]# ss -tnl # 查看监听端口(多了一个10080端口)
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:22 *:*
LISTEN 0 100 127.0.0.1:25 *:*
LISTEN 0 128 :::80 :::*
LISTEN 0 32 :::21 :::*
LISTEN 0 128 :::22 :::*
LISTEN 0 100 ::1:25 :::*
LISTEN 0 128 :::10080 :::*
删除此 .conf 文件后,就不会再有此端口了。
[root@Neo ~]# rm /etc/httpd/conf.d/test.conf
rm: remove regular file ‘/etc/httpd/conf.d/test.conf’? y
[root@Neo ~]# systemctl restart httpd.service
[root@Neo ~]# ss -tnl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:22 *:*
LISTEN 0 100 127.0.0.1:25 *:*
LISTEN 0 128 :::80 :::*
LISTEN 0 32 :::21 :::*
LISTEN 0 128 :::22 :::*
LISTEN 0 100 ::1:25 :::*