首页 > 其他分享 >Apache httpd 入门实战(1)--概念及安装

Apache httpd 入门实战(1)--概念及安装

时间:2023-04-09 10:55:27浏览次数:55  
标签:pcre httpd -- 线程 Apache 服务器 安装

Apache httpd 是 Apache 软件基金会的一个开源的 Web 服务器,可以在大多数计算机操作系统中运行,由于其跨平台和安全性被广泛使用,是最流行的 Web 服务器端软件之一。本文主要介绍其基本概念及安装,文中所使用到的软件版本:httpd 2.4.55、apr 1.7.2、apr-util 1.6.3、pcre 8.43、CentOS 7.9.2009。

1、Apache 概念

1.1、简介

Apache httpd 起初由伊利诺伊大学香槟分校的国家超级电脑应用中心(NCSA)开发,经过多次修改,成为世界上最流行的 Web 服务器软件之一。Apache取自“a patchy server”的读音,意思是充满补丁的服务器,因为它是自由软件,所以不断有人来为它开发新的功能、新的特性、修改原来的缺陷。Apache 的特点是简单、速度快、性能稳定,并可做代理服务器来使用。

本来它只用于小型或试验 Internet 网络,后来逐步扩充到各种 Unix 系统中,尤其对 Linux 的支持相当完美。Apache 有多种特性,可以支持SSL技术,支持多个虚拟主机。Apache 是以进程为基础的结构,进程要比线程消耗更多的系统开支,不太适合于多处理器环境,因此,在一个 Apache Web 站点扩容时,通常是增加服务器或扩充群集节点而不是增加处理器。世界上很多著名的网站如Amazon、Yahoo!、W3 Consortium、Financial Times 等都是 Apache的产物,它的成功之处主要在于它的源代码开放、有一支开放的开发队伍、支持跨平台的应用(可以运行在几乎所有的Unix、Windows、Linux系统平台上)以及它的可移植性等方面。

Apache httpd 的诞生极富有戏剧性。当 NCSA WWW 服务器项目停顿后,那些使用 NCSA WWW 服务器的人们开始交换他们用于该服务器的补丁程序,他们也很快认识到成立管理这些补丁程序的组织是必要的。就这样,诞生了Apache Group,后来这个团体在 NCSA 的基础上创建了 Apache httpd。

1.2、多处理模块(MPM)

Apache httpd 被设计为功能强大且灵活的 Web 服务器,可以在各种不同环境中的多种平台上工作。不同的平台和环境通常需要不同的功能,或者可能具有不同的方式来最有效地实现相同的功能。Apache httpd 通过其模块化设计一直适应各种环境。通过这种设计,网站管理员可以通过选择在编译时或运行时加载哪些模块来选择服务器中将包含哪些功能。

Apache httpd 2.0 将此模块化设计扩展到 Web 服务器的最基本功能。该服务器随附了多种选择的多处理模块(MPM),这些模块负责绑定到计算机上的网络端口,接受请求并调度子代来处理请求。

将模块化设计扩展到服务器的这一级别有两个重要的好处:

  • Apache httpd 可以更干净,更有效地支持各种操作系统。特别是,服务器的 Windows 版本现在更加高效,因为它 mpm_winnt 可以使用本机联网功能代替 Apache httpd 1.3 中使用的 POSIX 层。此好处还扩展到了实现专用 MPM 的其他操作系统。
  • 可以针对特定站点的需求更好地定制服务器。例如,需要大量可伸缩性的站点可以选择使用 worker 或 event,而需要稳定性或与旧版软件兼容的站点可以使用 prefork。

下表列出了各种操作系统的默认 MPM。如果您在编译时没有其他选择,则将选择该 MPM。

网络软件 mpm_netware
OS / 2 mpmt_os2
Unix 系统 prefork,worker或 event,取决于平台功能
视窗 mpm_winnt

在这里,“Unix” 用于表示类似 Unix 的操作系统,例如 Linux,BSD,Solaris,Mac OS X 等。

对于 Unix,关于安装哪个 MPM 的决定基于两个问题:
1、系统是否支持线程?
2、系统是否支持线程安全轮询(特别是 kqueue 和 epoll 函数)?
如果两个问题的答案均​​为“是”,则默认 MPM 为 event。
如果#1的答案为“是”,而#2的答案为“否”,则默认值为 worker。
如果两个问题的答案均​​为“否”,则默认 MPM 为 prefork。
实际上,这意味着默认值几乎始终为 event,因为所有现代操作系统都支持这两个功能。

编译的时候可以通过 --with-mpm 参数指定 mpm;安装完成后可通过 bin/httpd -V |grep -i "Server MPM" 命令查看当前使用的 mpm。

1.2.1、prefork

Aapache httpd 在启动之初,就预先派生一些子进程,然后等待请求过来;每个子进程只有一个线程,在一个时间点内,只能处理一个请求。
优点:成熟稳定,兼容所有模块,线程安全性高。
缺点:不适合处理高并发请求;一个进程相对占用更多的系统资源,消耗更多的内存。

1.2.2、worker

使用多进程和多线程的混合模式,也预先派生几个子进程(数量远少于 prefork 派生的);每个子进程创建多个线程,包括一个监听线程;每个请求会被分配一个线程来服务。
优点:占据更少的内存,适合高并发的场景。
缺点:必须考虑线程安全的问题,使用 keep-alive 长连接的时候,某个线程会被一直占用,即使没有收到请求,需要等待到超时才会释放;一个线程出现问题也会导致同一进程下的线程出现问题。

1.2.3、event

类似于 worker 的工作模式,最大区别是它解决了 keep-alive 场景下,长期被占用的线程的资源的浪费问题;event 模式下,会有一个专门的线程来管理这些 keep-alive 类型的线程,当有真实的请求过来的时候,将请求传递给服务线程,执行完毕又允许它释放。

2、安装

2.1、依赖软件安装

2.1.1、pcre 安装

官网(http://www.pcre.org/)下载 pcre,解压并安装:

unzip pcre-8.43.zip
cd pcre-8.43
./configure --prefix=/fop/soft/pcre-8.43
make
make install

安装完成后需把 pcre 的 bin 目录添加到 PATH 的环境变量中:

PATH=$PATH:/home/mongo/soft/pcre-8.43/bin
export PATH

2.1.2、APR 和 APR-Util 下载

官网(https://apr.apache.org/)下载 APR 和 APR-Util,然后解压到 httpd 源码目录的 srclib 目录下,解压后的目录需要把版本号去除:

APR 和 APR-Util 只需把源码放到指定目录,不需要单独编译及安装。

2.1.3、OpenSSL 安装

如果不需要配置 https,则该步不需要;OpenSSL 的安装可参考:OpenSSL 介绍(1)--概念及安装。这里安装在 /home/mongo/soft/openssl-1.1.1s 目录下。

2.2、httpd 安装

官网(https://httpd.apache.org/download.cgi)下载 httpd,解压后参考 2.1.2 的方法把 APR 和 APR-Util 的源码放到 srclib 目录下;然后编译安装:

cd httpd-2.4.55
./configure --prefix=/home/mongo/soft/httpd-2.4.55 --with-included-apr --enable-ssl --with-ssl=/home/mongo/soft/openssl-1.1.1s
make
make install

安装完成后需把 OpenSSL 的 libssl 和 libcrypto 包拷贝到 httpd 安装目录的 lib 下:

cp /home/mongo/soft/openssl-1.1.1s/lib/libssl.so.1.1  /home/mongo/soft/httpd-2.4.55/lib/
cp /home/mongo/soft/openssl-1.1.1s/lib/libcrypto.so.1.1  /home/mongo/soft/httpd-2.4.55/lib/

2.3、启动

编辑 conf/httpd.conf 文件:

Listen 8080

ServerName 10.49.196.33:8080

执行命令:

bin/apachectl

启动后访问 8080 端口:

2.4、停止及重启

bin/apachectl -k stop #停止
bin/apachectl -k restart #重启

2.5、错误处理

2.5.1、fatal error: expat.h: No such file or directory

make 时可能会报:

fatal error: expat.h: No such file or directory

这是由于系统中缺少 expat-devel,安装下即可:

yum install expat-devel

2.5.2、error: Did not find working script at pcre-config

configure 时可能会报:

configure: error: Did not find working script at pcre-config

找不到 pcre-config 命令,需把 pcre 的 bin 目录添加到 PATH 的环境变量中:

PATH=$PATH:$PCRE_HOME/bin
export PATH

2.5.3、Cannot load modules/mod_ssl.so into server

启动 httpd 时可能会报:

httpd: Syntax error on line 133 of /home/mongo/soft/httpd-2.4.55/conf/httpd.conf: Cannot load modules/mod_ssl.so into server: libssl.so.1.1: cannot open shared object file: No such file or directory

OpenSSL 相关的包找不到,需把 OpenSSL 的 libssl 和 libcrypto 包拷贝到 httpd 安装目录的 lib 下:

cp $OPNESSL_HOME/lib/libssl.so.1.1  $HTTPD_HOME/lib/
cp $OPNESSL_HOME/lib/libcrypto.so.1.1 $HTTPD_HOME/lib/

 

标签:pcre,httpd,--,线程,Apache,服务器,安装
From: https://www.cnblogs.com/wuyongyin/p/17184328.html

相关文章

  • C++逆向分析——多态和虚表
    虚表上一章了解了多态,那么我们来了解一下多态在C++中是如何实现的。了解本质,那就通过反汇编代码去看就行了,首先我们看下非多态的情况下的反汇编代码:然后再来看下多态情况下的反汇编代码:很明显这里多态的情况下会根据edx间接调用,而非多态则会直接调用。那么我们来看下间接......
  • Redis之父萨尔瓦多·桑菲利波又名安蒂雷斯
    萨尔瓦多·桑菲利波又名安蒂雷斯个人博客连接嗨,我是萨尔瓦多·桑菲利波,也被称为安提雷斯,一位居住在卡塔尼亚的意大利计算机程序员。我于7年1977月2020日出生在坎波贝洛迪利卡塔。2022年,我停止编写代码,开始全职写小说。现在,从<>年底开始,我再次编码,交替写作和编码。萨尔瓦......
  • 有了 AICG ,编代码 确实 高效。
    众数是指一组数据中出现次数最多的数值,可以通过Python中的统计模块collections来实现。假设给定的浮点数列表为float_list,可以按照以下步骤实现:1.导入collections模块```pythonimportcollections```2.将列表转换为计数器对象```pythoncounter=collections.Counter(float_......
  • 计算几何全家桶
    一、准备工作#defineLDdouble#defineVectorPoint#defineReregisterintconstLPeps=1e-8;//据说:出题的大学生基本上用的这个值inlineintdcmp(LDa){returna<eps?-1:(a>eps?1:0);}inlineLDAbs(LDa){returna*dcmp(a);}//绝对值structPoint{LDx,y;......
  • Nginx
    Nginx介绍:Nginx是一款轻量级的web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。其特点是占有内存小,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx的网站有:百度、京东、新浪、网易、腾讯、淘宝等https://nginx.org/Nginx下载和安装......
  • centos6.5安装流量监控工具iftop【杭州多测师】【杭州多测师_王sir】
    一、概述iftop可以用来监控网卡的实时流量(可以指定网段)、反向解析IP、显示端口信息等,详细的将会在后面的使用参数中说明。官方网站:http://www.ex-parrot.com/~pdw/iftop/二、依赖包安装yum install -y gcc flex byacc libpcap ncurses ncurses-devel libpcap-devel tcpdu......
  • TiDB × 阿里云试用体验(随迟但到)
    作者:CuteRay前言其实TiDB的阿里云试用活动其实也过去一段时间了,之前一直没有整块整块的时间慢慢地折腾,只能趁着闲暇之余慢慢体验,这篇文章也就写的很慢了,可惜错过了文章征文活动,错过好多礼物(咱们写文章是为了奖品的吗?肤浅!!!)。行话不多说,直入正题。部署部署没什么太多需要讲的,......
  • TiDB 数据库大版本升级-基于TiCDC异机升级
    作者:gary一、前言 本操作手册描述了xx用户TiDB集群基于TiCDC进行大版本升级的操作过程、操作方法与注意事项,用于指导xx用户完成TiDB集群基于TiCDC进行大版本异机升级以及回退方案。 二、升级架构图 ** **TiCDC的系统架构如上图所示:部署一套所需升级版本的下游TiDB集群......
  • 基于TiDB+Flink实现的滑动窗口实时累计指标算法
    作者:Jellybean前言在不少的支付分析场景里,大部分累计值指标可以通过T+n的方式计算得到。随着行业大环境由增量市场转为存量市场,产品的运营要求更加精细化、更快速反应,这对各项数据指标的实时性要求已经越来越高。产品如果能实时把握应用的整体运行情况或特征用户的状态,就可......
  • java中操作redis
             ......