Web Server - apache
- 1.1 概念介绍
- 1.1.1 什么是Web Service?
- 1.1.2 什么是Web Server?
- 1.1.3 常见的Web服务程序有哪些?
- 1.2 httpd
- 1.2.1 httpd和apache的区别关系
- 1.2.2 httpd版本介绍
- 1.2.3 httpd安装
- 1. yum 安装
- 2. 编译安装
- 1.3 通过systemctl管理httpd
- 1.3.1 配置文件原因
- 1.3.2 为httpd添加.service文件
- 1.3.3 通过systemctl管理httpd
1.1 概念介绍
1.1.1 什么是Web Service?
Web Service(Web网络服务)是一种被动访问的服务程序,即只有接收到互联网中其他主机发出的请求后才会响应,最终用于提供服务程序的 Web 服务器会通过 HTTP(超文本传输协议)或HTTPS(安全超文本传输协议)把请求的内容传送给用户。
1.1.2 什么是Web Server?
顾名思义,Web Server就是提供web服务的server,中文名称叫网页服务器
或web服务器
,也称为WWW(WORLD WIDE WEB)服务器。Web server的主要功能是提供网上信息浏览服务,具体包括存储,处理和传递网页给客户,它只需要支持HTTP协议,HTML文档格式及URL,与客户端的网络浏览器配合使用。
主机与web服务器之间的通信:
1.1.3 常见的Web服务程序有哪些?
提供 Web 网络服务的程序比较常用的有 IIS、Nginx 和 Apache 等。
-
IIS(Internet Information Services,互联网信息服务)是
Windows 系统
中默认的 Web 服务程序,IIS 只能在 Windows 系统中使用,因此它不在我们的讨论范围内。 -
2004 年 10 月 4 日,为俄罗斯知名门户站点而开发的 Web 服务程序 Nginx 横空出世。Nginx 程序作为一款轻量级的网站服务软件,因其稳定性和丰富的功能而快速占领服务器市场,但 Nginx 最被认可的还当是系统资源消耗低且并发能力强,因此得到了国内诸如新浪、网易、腾讯等门户站的青睐。
-
Apache 程序是目前拥有很高市场占有率的 Web 服务程序之一,其跨平台和安全性广泛被认可且拥有快速、可靠、简单的 API 扩展。Apache 服务程序可以运行在 Linux 系统、UNIX 系统甚至是 Windows 系统中,支持基于IP、域名及端口号的虚拟主机功能,支持多种认证方式,集成有代理服务器模块、安全Socket 层(SSL),能够实时监视服务状态与定制日志消息,并有着各类丰富的模块支持。Apache是RHEL5、6、7系统中默认的Web服务程序。
本章将介绍apache(httpd)程序的配置及使用
1.2 httpd
官网 https://httpd.apache.org/
1.2.1 httpd和apache的区别关系
- httpd是unix系统(例如Unix,bsd)apache服务程序的可执行文件的文件名,一般在这些系统中httpd指的就是apache。
- apache作为web服务,像win下面的IIS一样;apache2以上版本改称为httpd。
httpd是Apache超文本传输协议(HTTP)服务器的主程序。被设计为一个独立运行的后台进程,它会建立一个处理请求的子进程或线程的池。通常,httpd不应该被直接调用,而应该在类Unix系统中由 apachectl 调用,在Windows NT/2000/XP/2003中作为服务运行和在Windows 95/98/ME中作为控制台程序运行。
http/https:hyper text transfer protocol 超文本传输协议,位于传输层,默认端口80/tcp
html:hyper text mark language 超文本标记语言
httpd:c/s架构(client/server),httpd通过http协议通信
1.2.2 httpd版本介绍
CentOS6系列的版本默认提供的是httpd-2.2版本的rpm包
CentOS7系列的版本默认提供的是httpd-2.4版本的rpm包
- httpd有很多特性,下面就分别来说说httpd-2.2版本和httpd-2.4版本各自的特性。
版本 | 特性 |
---|---|
2.2 | 事先创建进程 按需维持适当的进程 模块化设计,核心比较小,各种功能通过模块添加(包括PHP),支持运行时配置,支持单独编译模块 支持多种方式的虚拟主机配置,如基于ip的虚拟主机,基于端口的虚拟主机,基于域名的虚拟主机等 支持https协议(通过mod_ssl模块实现) 支持用户认证 支持基于IP或域名的ACL访问控制机制 支持每目录的访问控制(用户访问默认主页时不需要提供用户名和密码,但是用户访问某特定目录时需要提供用户名和密码) 支持URL重写 支持MPM(Multi Path Modules,多处理模块)。用于定义httpd的工作模型(单进程、单进程多线程、多进程、多进程单线程、多进程多线程) |
2.4 | httpd-2.4的新特性: MPM支持运行DSO机制(Dynamic Share Object,模块的动态装/卸载机制),以模块形式按需加载 支持event MPM,event MPM模块生产环境可用 支持异步读写 支持每个模块及每个目录分别使用各自的日志级别 每个请求相关的专业配置,使用来配置 增强版的表达式分析器 支持毫秒级的keepalive timeout 基于FQDN的虚拟主机不再需要NameVirtualHost指令 支持用户自定义变量 支持新的指令(AllowOverrideList) 降低对内存的消耗 |
- 共有模块
工作模型 | 工作方式 |
---|---|
prefork | 多进程模型,预先生成进程,一个请求用一个进程响应 一个主进程负责生成n个子进程,子进程也称为工作进程 每个子进程处理一个用户请求,即使没有用户请求,也会预先生成多个空闲进程,随时等待请求到达,最大不会超过1024个 |
worker | 基于线程工作,一个请求用一个线程响应(启动多个进程,每个进程生成多个线程) |
event | 基于事件的驱动,一个进程处理多个请求 |
- httpd-2.4在之前的版本基础上新增了几大模块
模块 | 功能 |
---|---|
mod_proxy_fcgi | 反向代理时支持apache服务器后端协议的模块 |
mod_ratelimit | 提供速率限制功能的模块 |
mod_remoteip | 基于ip的访问控制机制被改变,不再支持使用Order,Deny,Allow来做基于IP的访问控制 |
1.2.3 httpd安装
Apache是RHEL5、6、7系统中默认的Web服务程序。如果未安装或想用较新版本,可以通过如下:
1. yum 安装
]# yum -y install httpd
2. 编译安装
https://downloads.apache.org/httpd/Announcement2.4.html说明:
This release requires the Apache Portable Runtime (APR), minimum version 1.5.x, and APR-Util, minimum version 1.5.x. Some features may require the 1.6.x version of both APR and APR-Util. The APR libraries must be upgraded for all features of httpd to operate correctly.
编译安装httpd依赖于apr,apr-util,httpd三个包
https://httpd.apache.org/download.cgi
https://apr.apache.org/download.cgi
- 准备工作
安装开发工具及创建用户
[root@localhost ~]# yum groups mark install "Development Tools" //安装开发工具包
[root@localhost ~]# useradd -r -M -s /sbin/nologin apache //创建系统用户
[root@localhost ~]# id apache
uid=995(apache) gid=992(apache) groups=992(apache)
[root@localhost ~]# yum -y install openssl-devel pcre-devel expat-devel libtool make //安装依赖包
- 下载并解压安装包及依赖包
① 下载后上传到服务器
[root@k8s-node-02 share]# ll
total 11180
drwxr-xr-x 28 501 games 4096 Jan 31 15:56 apr-1.7.2
-rw-r--r-- 1 root root 1115676 Feb 20 05:19 apr-1.7.2.tar.gz
drwxr-xr-x 20 501 games 4096 Jan 31 15:57 apr-util-1.6.3
-rw-r--r-- 1 root root 556623 Feb 20 05:19 apr-util-1.6.3.tar.gz
drwxr-xr-x 12 501 games 4096 Jan 10 08:38 httpd-2.4.55
-rw-r--r-- 1 root root 9758888 Feb 20 04:42 httpd-2.4.55.tar.gz
② 或直接下载到服务器,取决于网速或服务器网络状态
[root@localhost ~]# dnf -y install wget
[root@localhost ~]# wget https://downloads.apache.org/apr/apr-1.7.0.tar.gz
[root@localhost ~]# wget https://downloads.apache.org/apr/apr-util-1.6.1.tar.gz
[root@localhost ~]# wget https://downloads.apache.org/httpd/httpd-2.4.53.tar.gz
- 安装apr
[root@k8s-node-02 apr-1.7.2]# ./configure --prefix=/usr/local/apr
...
config.status: executing libtool commands
rm: cannot remove 'libtoolT': No such file or directory
config.status: executing default commands
config.status: include/apr.h is unchanged
config.status: include/arch/unix/apr_private.h is unchanged
[root@k8s-node-02 apr-1.7.2]# make
[root@k8s-node-02 apr-1.7.2]# make install
如果出现上面的报错,即未找到某文件,无法删除,可以如下修改,不删也不影响
[root@k8s-node-02 apr-1.7.2]# cat configure|grep '# $RM'
# $RM "$cfgfile"
- 安装apr-util
[root@localhost ~]# cd apr-util-1.6.1
[root@localhost apr-util-1.6.1]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
[root@localhost apr-util-1.6.1]# make
[root@localhost apr-util-1.6.1]# make install
- 安装httpd
]# ./configure --prefix=/usr/local/apache \
--enable-so \
--enable-ssl \
--enable-cgi \
--enable-rewrite \
--with-zlib \
--with-pcre \
--with-apr=/usr/local/apr \
--with-apr-util=/usr/local/apr-util/ \
--enable-modules=most \
--enable-mpms-shared=all \
--with-mpm=prefork
]# make
]# make install
- 设置环境变量
[root@k8s-node-02 httpd-2.4.55]# cd /usr/local/apache/
[root@k8s-node-02 apache]# ls
bin build cgi-bin conf error htdocs icons include logs man manual modules
[root@k8s-node-02 apache]# echo 'export PATH=/usr/local/apache/bin:$PATH' > /etc/profile.d/apache.sh
[root@k8s-node-02 apache]# source /etc/profile.d/apache.sh
[root@k8s-node-02 apache]# which httpd
/usr/local/apache/bin/httpd
[root@k8s-node-02 apache]# which apachectl
/usr/local/apache/bin/apachectl
- 配置映射关系
[root@localhost ~]# ln -s /usr/local/apache/include /usr/include/apache //软连接
[root@k8s-node-02 apache]# ll /usr/include/apache -d
lrwxrwxrwx 1 root root 25 Feb 20 05:55 /usr/include/apache -> /usr/local/apache/include
- 配置man文档
[root@k8s-node-02 apache]# grep apache /etc/man_db.conf
MANDATORY_MANPATH /usr/local/apache/man
- 关闭防火墙
[root@k8s-node-02 apache]# systemctl disable --now firewalld
[root@k8s-node-02 apache]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Docs: man:firewalld(1)
- 关闭selinux
[root@localhost ~]# setenforce 0 //当前生效,当前关闭
[root@localhost ~]# getenforce
Permissive
[root@localhost ~]# vim /etc/selinux/config //重启生效
SELINUX=disabled //修改
- 检查默认端口80使用情况
[root@k8s-node-02 apache]# ss -nltp|grep 80
LISTEN 0 128 *:56805 *:* users:(("rpc.statd",pid=123352,fd=9))
- 启动httpd
[root@k8s-node-02 apache]# httpd
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using fe80::20c:29ff:fe09:d272%ens33. Set the 'ServerName' directive globally to suppress this message
[root@k8s-node-02 apache]# ss -nltp|grep 80
LISTEN 0 128 *:56805 *:* users:(("rpc.statd",pid=123352,fd=9))
LISTEN 0 128 [::]:80 [::]:* users:(("httpd",pid=30152,fd=4),("httpd",pid=30151,fd=4),("httpd",pid=30150,fd=4),("httpd",pid=30149,fd=4),("httpd",pid=30148,fd=4),("httpd",pid=30147,fd=4))
[root@k8s-node-02 apache]# ps -ef|grep httpd
root 30147 1 0 06:03 ? 00:00:00 httpd
daemon 30148 30147 0 06:03 ? 00:00:00 httpd
daemon 30149 30147 0 06:03 ? 00:00:00 httpd
daemon 30150 30147 0 06:03 ? 00:00:00 httpd
daemon 30151 30147 0 06:03 ? 00:00:00 httpd
daemon 30152 30147 0 06:03 ? 00:00:00 httpd
解决:AH00558: httpd: Could not reliably determine the server’s fully qualified domain name, using fe80::20c:29ff:fe09:d272%ens33. Set the ‘ServerName’ directive globally to suppress this message
修改:ServerName
[root@k8s-node-02 conf]# grep '^Server' httpd.conf
ServerRoot "/usr/local/apache"
ServerAdmin you@example.com
ServerName localhost:80
- 显示页面
使用浏览器访问http://192.168.71.253
,个人服务器IP,即可显示apache页面信息
自定义显示页面
[root@k8s-node-02 htdocs]# echo 'Hello apache!'> index.html
[root@k8s-node-02 htdocs]# pwd
/usr/local/apache/htdocs
1.3 通过systemctl管理httpd
1.3.1 配置文件原因
systemctl管理服务依靠的是/lib/systemd/system配置文件下有对应服务以.service结尾的文件,yum安装或者rpm安装服务时该文件是程序员已经写好了,但是编译安装没有此文件所以需要我们手写才可以通过systemctl来管理服务
1.3.2 为httpd添加.service文件
在/lib/systemd/system中添加httpd.service
[root@k8s-node-02 system]# cat httpd.service
[Unit]
Description=httpd web
[Service]
PIDFile=/usr/local/apache/logs/httpd.pid
ExecStart=/usr/local/apache/bin/httpd
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
[Install]
WantedBy=multi-user.target
模板:
[Unit] #软件描述
Description=httpd web #服务的描述
[Service] #指定如何启动此程序
PIDFile=/opt/httpd/logs/httpd.pid #pid号的配置文件存放位置一般存放在安装服务的logs中,以上httpd服务编译安装在/opt/httpd中,所以路径更改为/opt/httpd/logs/httpd.pid,httpd.pid文件会自动创建
ExecStart=/opt/httpd/bin/httpd #绝对路径或脚本启动,上述编译安装的服务开启绝对路径为/opt/httpd/bin/httpd httpd为bin下的用于systemctl启动的服务同名文件
ExecReload=/bin/kill -s HUP $MAINPID #热加载
ExecStop=/bin/kill -s TERM $MAINPID #杀死进程
[Install]
WantedBy=multi-user.target #在图形界面开启
1.3.3 通过systemctl管理httpd
[root@k8s-node-02 system]# systemctl daemon-reload
[root@k8s-node-02 system]# apachectl stop
[root@k8s-node-02 system]# systemctl start httpd
[root@k8s-node-02 system]# systemctl status httpd
● httpd.service - httpd web
Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
Active: active (running) since Mon 2023-02-20 10:14:03 EST; 6s ago
Main PID: 113491 (httpd)
Tasks: 6
Memory: 1.7M
CGroup: /system.slice/httpd.service
├─113491 /usr/local/apache/bin/httpd
├─113492 /usr/local/apache/bin/httpd
├─113493 /usr/local/apache/bin/httpd
├─113494 /usr/local/apache/bin/httpd
├─113495 /usr/local/apache/bin/httpd
└─113496 /usr/local/apache/bin/httpd
Feb 20 10:14:03 k8s-node-02 systemd[1]: Started httpd web.
[root@k8s-node-02 system]# systemctl enable httpd
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.