apache2.2升级2.4
# Apache 2.2 升级 2.4
Apache 2.2 到 2.4 版本问题比较多,具体过程在这里记录一下。升级到2.4版本主要是为了使用event模式。
MPM(Multipath Processing Module)多道处理模块,是一个统称,有多种实现:
- prefork:每个进程响应一个用户请求,预先生成多个空闲进程;基于select()机制,单个进程最大并发1024个。
缺点:相对占用更多的系统资源,不擅长处理高并发请求。
- worker:启动多个进程,每个进程生成多个线程,每个线程响应一个用户请求;
优点:相对prefork,占用更少的内存,高并发处理能力优秀。
缺点:线程不如进程安全;若开启了keep-alive,在高并发的场景中可能出现无服务线程可用的问题。
- event:启动多个线程,每个线程响应N个请求。在httpd 2.4版本中被正式引入。
优点:event会启动一个专门的线程来管理keep-alive类型的线程,当有真实请求过来的时候,将请求传递给服务线程,执行完毕后,又允许它释放,因此它的并发响应能力比worker模块更强。
# 1. 安装apache
# 1.1. 编译安装PCRE
由于PCRE已经升级到PCRE2,这里提供两个地址:
我这里采用的是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
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
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
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模块
采用的是最新版本进行的编译安装:
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
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++
# 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
# 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
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
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
2
3
4
5