首页
  • 监控

    • grafana
    • prometheus
  • 学习笔记

    • 《核心系统命令实战》
    • 《MySQL 是怎样运行的:从根儿上理解 MySQL》
    • 《Ansible权威指南》
  • 博客搭建
  • git
  • python
  • 友情链接
  • 文档编写规范
  • 我用过的电脑
  • 喷涂相关
  • 每日一溜
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

小刘说

砥砺前行
首页
  • 监控

    • grafana
    • prometheus
  • 学习笔记

    • 《核心系统命令实战》
    • 《MySQL 是怎样运行的:从根儿上理解 MySQL》
    • 《Ansible权威指南》
  • 博客搭建
  • git
  • python
  • 友情链接
  • 文档编写规范
  • 我用过的电脑
  • 喷涂相关
  • 每日一溜
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • zabbix

    • zabbix简介&安装
  • docker

  • kubernetes

  • harbor

  • mysql

  • nexus

  • jenkins

  • elasticsearch

  • 学习笔记

  • apache2.2升级2.4
    • 1. 安装apache
      • 1.1. 编译安装PCRE
      • 1.2. 下载apr和apr-util
      • 1.3. 编译安装apache
    • 2. 编译安装mod_wsgi模块
    • 问题
      • 1. configure: error: Invalid C++ compiler or C++ compiler flags
      • 2. checking whether to enable moddeflate... configure: error: moddeflate has been requested but can not be built due to prerequisite failures
      • 3. checking whether to enable modssl... configure: error: modssl has been requested but can not be built due to prerequisite failures
      • 4. make[2]: *** [htpasswd] Error 1
      • 5. 编译安装mod_wsgi失败
  • heredoc(cat EOF)
  • Rocky linux 9 初始化
  • 运维
小刘
2023-03-28
目录

apache2.2升级2.4

# Apache 2.2 升级 2.4

Apache 2.2 到 2.4 版本问题比较多,具体过程在这里记录一下。升级到2.4版本主要是为了使用event模式。

MPM(Multipath Processing Module)多道处理模块,是一个统称,有多种实现:

  1. prefork:每个进程响应一个用户请求,预先生成多个空闲进程;基于select()机制,单个进程最大并发1024个。

​ 缺点:相对占用更多的系统资源,不擅长处理高并发请求。

  1. worker:启动多个进程,每个进程生成多个线程,每个线程响应一个用户请求;

​ 优点:相对prefork,占用更少的内存,高并发处理能力优秀。

​ 缺点:线程不如进程安全;若开启了keep-alive,在高并发的场景中可能出现无服务线程可用的问题。

  1. event:启动多个线程,每个线程响应N个请求。在httpd 2.4版本中被正式引入。

​ 优点:event会启动一个专门的线程来管理keep-alive类型的线程,当有真实请求过来的时候,将请求传递给服务线程,执行完毕后,又允许它释放,因此它的并发响应能力比worker模块更强。

# 1. 安装apache

# 1.1. 编译安装PCRE

由于PCRE已经升级到PCRE2,这里提供两个地址:

PCRE2 (opens new window)

PCRE-8.45 (opens new window)

我这里采用的是8.45版本进行的编译安装:

wget https://sourceforge.net/projects/pcre/files/pcre/8.45/pcre-8.45.tar.gz
tar zxvf pcre-8.45.tar.gz
cd pcre-8.45/
./configure --prefix=/usr/local/pcre
make && make install
1
2
3
4
5

# 1.2. 下载apr和apr-util

采用清华镜像源下载:https://mirrors.tuna.tsinghua.edu.cn/apache/apr/

wget https://mirrors.tuna.tsinghua.edu.cn/apache/apr/apr-1.7.2.tar.gz
wget https://mirrors.tuna.tsinghua.edu.cn/apache/apr/apr-util-1.6.3.tar.gz
1
2

# 1.3. 编译安装apache

同样采用清华镜像源下载:https://mirrors.tuna.tsinghua.edu.cn/apache/httpd/

apr 和 apr-util 采用在 httpd 编译安装过程中进行编译安装。

wget https://mirrors.tuna.tsinghua.edu.cn/apache/httpd/httpd-2.4.56.tar.gz
tar zxvf httpd-2.4.56.tar.gz
cd httpd-2.4.56/
tar zxvf ../apr-1.7.2.tar.gz -C srclib/
tar zxvf ../apr-util-1.6.3.tar.gz -C srclib/
mv srclib/apr-util-1.6.3/ srclib/apr-util
mv srclib/apr-1.7.2/ srclib/apr
./configure --prefix=/usr/local/apache2 \
            --with-mpm=event \
            --enable-so \
            --enable-rewrite --enable-mods-shared=all \
            --enable-nonportable-atomics=yes \
            --disable-dav \
            --enable-deflate \
            --enable-cache \
            --enable-disk-cache \
            --enable-mem-cache \
            --enable-ssl \
            --enable-file-cache \
            --with-included-apr \
            --with-pcre=/usr/local/pcre
make && make install
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

主要看 ./configure 后面的参数。

  • --prefix 指定安装的目录。
  • --with-mpm 是开启多处理模块 MPM (opens new window)。
  • prefork 兼容旧版本,可以选择用 workder 或 event。
  • --enable-so 猜测是识别 so 文件名的模块。
  • --enable-rewrite 开启重写,就是隐藏路由中入口文件名相关的功能。
  • disable-dav 关闭 dav 模块,dav 主要增加 PUT, DELETE, MKCOL, COPY 和 MOVE 等类型的方法。
  • --enable-deflate 支持 gzip 压缩,通过压缩页面优化传输速度。带有 cache 的就是开启相关类型的缓存了,如文件缓存,内存缓存等。
  • --enable-ssl 和 --with-ssl 是指定 OpenSSL 的位置,主要涉及到网络安全传输,比如使用 https。
  • --with-included-apr 是在 apr 和 apr-utl 已经解压缩放到 srclib 中的情况。
  • --with-pcre 使用兼容的正则表达式库。

每次编译成功后,httpd 都会把编译的指令参数写入到文件 config.nice 中,可以通过 find / -name config.nice 查看服务器上所有的成功编译的编译参数。

# 2. 编译安装mod_wsgi模块

mod_wsgi (opens new window)

采用的是最新版本进行的编译安装:

wget https://github.com/GrahamDumpleton/mod_wsgi/archive/refs/tags/4.9.4.zip
unzip 4.9.4.zip
cd mod_wsgi-4.9.4/
./configure --with-apxs=/usr/local/apache2/bin/apxs \
			--with-python=/usr/local/bin/python
make && make install
1
2
3
4
5
6

# 问题

# 1. configure: error: Invalid C++ compiler (opens new window) or C++ compiler flags

因为系统缺失 gcc-c++ 库。

yum install -y gcc-c++
1

# 2. checking whether to enable mod_deflate... configure: error: mod_deflate has been requested but can not be built due to prerequisite failures

系统缺失 zlib-devel 库。

yum install -y zlib-devel
1

# 3. checking whether to enable mod_ssl... configure: error: mod_ssl has been requested but can not be built due to prerequisite failures

系统缺失 openssl-devel 库。也可能由于openssl版本过旧,升级openssl版本。

yum install -y openssl-devel
yum update -y openssl
1
2

# 4. make[2]: *** [htpasswd] Error 1

编译配置中并没有指定 --with-included-apr的具体引用路径,导致找不到相应的库文件,而 --with-included-apr 默认是查找/usr/lib下的库文件,而,正确的引用应该是/usr/lib64下的。

mv /usr/lib/libm.a /usr/lib/libm.a.bak
mv /usr/lib/libm.so /usr/lib/libm.so.bak
mv /usr/lib/libexpat.so /usr/lib/libexpat.so.bak
ln -s /usr/lib64/libm.a /usr/lib/libm.a
ln -s /usr/lib64/libm.so /usr/lib/libm.so
ln -s /usr/lib64/libexpat.so /usr/lib/libexpat.so
1
2
3
4
5
6

# 5. 编译安装mod_wsgi失败

重新编译Python,生成动态库。注意这里默认会把文件编译到/usr/bin/下面。

wget https://www.python.org/ftp/python/2.7.2/Python-2.7.2.tgz
tar zxvf Python-2.7.2.tgz
cd Python-2.7.2
./configure --enable-shared
make && make install
1
2
3
4
5
上次更新: 2024/05/11, 03:55:33

← 《Ansible权威指南》 heredoc(cat EOF)→

最近更新
01
kubernetes控制器-Service
08-18
02
kubernetes控制器-Deployment
08-08
03
kubernetes调度基础
07-27
更多文章>
Theme by Vdoing | Copyright © 2023-2024 本站支持IPv6访问 本站支持SSL安全访问
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式