Centos7源码升级nginx

  1. 1. 说明
  2. 2. 实施
    1. 2.1. 安装依赖依赖
    2. 2.2. openssl编译安装
      1. 2.2.1. 下载 openssl 源码包
      2. 2.2.2. 编译 openssl 安装
      3. 2.2.3. 备份老 openssl
      4. 2.2.4. 创建 openssl 软链接
      5. 2.2.5. 更新加载动态连接库数据
      6. 2.2.6. 检查 openssl 版本
    3. 2.3. nginx编译安装
      1. 2.3.1. 下载 nginx 源码包
      2. 2.3.2. 创建用户
      3. 2.3.3. 修复文件
      4. 2.3.4. 编译安装
      5. 2.3.5. 添加环境变量
      6. 2.3.6. 检查 nginx 版本

说明

由于openssl不提供1.X版本,只提供3.x版本,现以openssl3.0+nginx1.26源码安装

实施

安装依赖依赖

1
2
yum -y groupinstall "Development tools"
yum install gcc openssl-devel bzip2-devel libffi-devel perl-IPC-Cmd

openssl编译安装

下载 openssl 源码包

1
2
3
wget https://www.openssl.org/source/openssl-3.0.13.tar.gz
tar -zxf openssl-3.0.13.tar.gz
pushd openssl-3.0.13 > /dev/null

编译 openssl 安装

1
2
3
./config --prefix=/usr/local/openssl shared zlib
cpu_num=`cat /proc/stat | grep cpu[0-9] -c`
make -j${cpu_num} && make install

备份老 openssl

1
2
mv /usr/bin/openssl /usr/bin/openssl.oldbak
mv /usr/include/openssl /usr/include/openssl.oldbak

创建 openssl 软链接

1
2
3
4
ln -sf /usr/local/openssl/bin/openssl /usr/bin/openssl
ln -sf /usr/local/openssl/include/openssl /usr/include/openssl
ln -sf /usr/local/openssl/lib64/libssl.so.3 /usr/lib64/libssl.so.3
ln -sf /usr/local/openssl/lib64/libcrypto.so.3 /usr/lib64/libcrypto.so.3

更新加载动态连接库数据

1
2
3
4
#openssl放弃了32位,默认采用64位

echo /usr/local/openssl/lib64 >> /etc/ld.so.conf
ldconfig -v

检查 openssl 版本

1
2
3
openssl version
popd > /dev/null
rm -rf openssl-3.0.13

nginx编译安装

下载 nginx 源码包

1
2
3
wget https://nginx.org/download/nginx-1.26.0.tar.gz
tar -zxf nginx-1.26.0.tar.gz
pushd nginx-1.26.0 > /dev/null

创建用户

1
2
3
4
5
6
7
# 创建一个用户运行nginx
run_user=www
run_group=www
id -g ${run_group} >/dev/null 2>&1
[ $? -ne 0 ] && groupadd ${run_group}
id -u ${run_user} >/dev/null 2>&1
[ $? -ne 0 ] && useradd -g ${run_group} -M -s /sbin/nologin ${run_user}

修复文件

由于nginx 1.26默认只支持1.x,需要对源码进行修改

1
2
3
4
5
6
7
8
9
10
11
12
13
vim auto/lib/openssl/conf

## 原内容
CORE_INCS="$CORE_INCS $OPENSSL/.openssl/include"
CORE_DEPS="$CORE_DEPS $OPENSSL/.openssl/include/openssl/ssl.h"
CORE_LIBS="$CORE_LIBS $OPENSSL/.openssl/lib/libssl.a"
CORE_LIBS="$CORE_LIBS $OPENSSL/.openssl/lib/libcrypto.a"

## 新内容
CORE_INCS="$CORE_INCS $OPENSSL/include"
CORE_DEPS="$CORE_DEPS $OPENSSL/include/openssl/ssl.h"
CORE_LIBS="$CORE_LIBS $OPENSSL/lib64/libssl.a"
CORE_LIBS="$CORE_LIBS $OPENSSL/lib64/libcrypto.a"

编译安装

编译完成指定安装到/usr/local/nginx

1
2
3
4
./configure --prefix=/usr/local/nginx --user=${run_user} --group=${run_group} --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-http_ssl_module --with-http_gzip_static_module --with-http_realip_module --with-http_flv_module --with-http_mp4_module --with-openssl=/usr/local/openssl --with-stream --with-stream_ssl_module  --group=www --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_gunzip_module --with-http_random_index_module --with-http_secure_link_module --with-http_slice_module --with-http_v3_module --with-mail --with-mail_ssl_module  --with-stream_realip_module --with-stream_ssl_preread_module

cpu_num=`cat /proc/stat | grep cpu[0-9] -c`
make -j${cpu_num} && make install

添加环境变量

1
2
echo "export PATH=/usr/local/nginx/sbin:$PATH" >> /etc/profile
source /etc/profile

检查 nginx 版本

1
2
3
nginx -V
popd > /dev/null
rm -rf nginx-1.26.0*
nginx配置提示

Nginx在1.25.0版本中实验性的支持HTTP/3后,在1.25.1版本中弃用了listen指令的http2参数,单独加入了http2指令。

错误方式:

listen 443 ssl http2;

正确方式:

listen 443 ssl;
http2 on;