本篇文章针对内网环境安装 nginx,记录安装步骤和安装过程中存在的问题解决。
参考文章:
离线部署 Nginx 的安装详细教程+遇到的问题和解决方法
启动 Nginx 报错 ./nginx: error while loading shared libraries: libcrypto.so.1.1: cannot open shared
1. 环境准备
系统环境:CentOS7
nginx 版本:1.20.2
pcre 版本:8.45
zlib 版本:1.3
openssl 版本:1.1.0h
gcc 版本:4.8.5
g++版本:4.8.5
2. 安装包下载
- nginx 安装包下载:http://nginx.org/en/download.html(版本:nginx-1.20.2.tar.gz)
- pcre 安装包下载:https://sourceforge.net/projects/pcre/files/pcre/8.45/(版本:pcre-8.45.tar.gz)
- zlib 安装包下载:http://www.zlib.net/(版本:zlib-1.3.tar.gz)
- openssl 安装包下载:https://www.openssl.org/source/(版本:openssl-1.1.0h.tar.gz)
- gcc 和 g++安装包下载:https://www.aliyundrive.com/s/2dPRjiwabBX(提取码:m14r)
Tips:
pcre:是一个正则表达式库。
zlib:是一个开源的数据压缩库,提供了对数据的无损压缩和解压功能。
openssl:是一个开源的加密库,提供了各种加密算法和安全协议的实现。
安装包就是这么多,提前准备好一起打包上传到服务器中。
3. 安装依赖
3.1 检查 gcc 和 g++是否已经安装,通过一下命名来检查
# 检查gcc是否安装
gcc --version
# 检查g++是否安装
g++ --version
Tips:如果都能正常显示版本号,表示已经安装,如果给出 command not found,表示没有安装。如果已经安装好,注意版本是否正确,不正确需要重新安装。
分别进入到上面解压后的 gcc、g++目录,执行内部已经写好的install.sh
文件。执行命令如下:
sh install.sh
如果在执行过程中遇到版本冲突问题,可以编辑 install.sh 文件,将 rpm 命令后面加上--replacefiles
参数。示例如下:
# 原脚本内安装命令
rpm -ivh gcc-4.8.5-4.el7.x86_64.rpm
# 修改后
rpm -ivh gcc-4.8.5-4.el7.x86_64.rpm --replacefiles
安装存在的问题:报以下错误
error: Failed dependencies:
glibc-common = 2.17-105.el7 is needed by glibc-2.17-105.el7.x86_64
error: Failed dependencies:
glibc = 2.17-105.el7 is needed by glibc-common-2.17-105.el7.x86_64
Preparing... ################################# [100%]
package mpfr-3.1.1-4.el7.x86_64 is already installed
Preparing... ################################# [100%]
package libmpc-1.0.1-3.el7.x86_64 is already installed
Preparing... ################################# [100%]
package cpp-4.8.5-4.el7.x86_64 is already installed
Preparing... ################################# [100%]
package kernel-headers-3.10.0-327.el7.x86_64 is already installed
error: Failed dependencies:
glibc = 2.17-105.el7 is needed by glibc-headers-2.17-105.el7.x86_64
error: Failed dependencies:
glibc = 2.17-105.el7 is needed by glibc-devel-2.17-105.el7.x86_64
glibc-headers is needed by glibc-devel-2.17-105.el7.x86_64
glibc-headers = 2.17-105.el7 is needed by glibc-devel-2.17-105.el7.x86_64
error: Failed dependencies:
glibc-devel >= 2.2.90-12 is needed by gcc-4.8.5-4.el7.x86_64
libgomp = 4.8.5-4.el7 is needed by gcc-4.8.5-4.el7.x86_64
解决方案:在执行的命令后面再加上--force --nodeps
,分别表示强制安装和不查找依赖关系,如下示例:
# 原脚本内安装命令
rpm -ivh gcc-4.8.5-4.el7.x86_64.rpm
# 修改后
rpm -ivh gcc-4.8.5-4.el7.x86_64.rpm --force --nodeps
安装完成后,分别使用gcc --version
和g++ --version
检查是否安装完成。
3.2 安装 pcre
依次执行下面的命令:
# 解压
tar -xvf pcre-8.45.tar.gz
# 进入解压后的目录
cd pcre-8.45
# 配置
./configure
# 编译
make
# 安装
make install
3.3 安装 zlib
依次执行下面的命令:
# 解压
tar -xvf zlib-1.3.tar.gz
# 进入解压后的目录
cd zlib-1.3
# 配置
./configure
# 编译
make
# 安装
make install
3.4 安装 openssl
依次执行下面的命令:
# 解压
tar -xvf openssl-1.1.0h.tar.gz
# 进入解压后的目录
cd openssl-1.1.0h
# 配置
./config
# 编译
make
# 安装
make install
Tips:pcre、zlib、openssl 的安装路径需要记一下,以备后续可能会使用到
4. 安装 nginx
- 解压 nginx,
tar -xvf nginx-1.20.2.tar.gz
; - 进入 nginx 解压后的目录,
cd nginx-1.20.2
; - 配置环境,
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
;
--prefix=/usr/local/nginx
:指定安装目录为/data/nginx。在编译和安装完成后,软件将被安装到该目录下.--with-http_stub_status_module
:启用 HTTP Stub Status 模块。该模块是 Nginx 的一个内置模块,用于获取 Nginx 服务器的状态信息。--with-http_ssl_module
:启用 HTTP SSL 模块。该模块使得 Nginx 支持通过 HTTPS 提供安全的加密传输。
Tips:如果在执行配置的时候,报 pcre 找不到的问题,上面记录的路径就可以使用到了,将配置环境命令修改为
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-pcre=/usr/local/pcre-8.45 --with-zlib=/usr/local/zlib-1.3 --with-openssl=/usr/local/openssl-1.1.0h
- 配置环境完成后,执行
make && make install
命令,进行编译和安装。
5. 测试是否安装成功
根据我上面的安装步骤,我的 nginx 是安装在/usr/local/nginx
目录下,执行启动命令如下:
/usr/local/nginx/sbin/nginx
执行可能会报错:
/usr/local/nginx/sbin/nginx: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory
是因为libssl.so.1.1
找不到的问题,可以通过一下方式建立软连接解决:
ln -s /usr/local/lib64/libssl.so.1.1 /usr/lib64/libssl.so.1.1
上面软连接创建好后,再执行 nginx 启动命令,可能还会报错:
/usr/local/nginx/sbin/nginx: error while loading shared libraries: libcrypto.so.1.1: cannot open shared object file: No such file or directory
这是因为libcrypto.so.1.1
找不到的问题,如同上面的操作,再为libcrypto.so.1.1
建立一下软连接。
ln -s /usr/local/lib64/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1
此时再去执行启动命令,就可以成功啦,然后在浏览器上通过http://ip:port
的方式测试是否成功,给出Welcome to Nginx!
页面,表示安装完成。(nginx 默认端口是 80,我是使用虚拟机安装的,ip 地址是:192.168.195.136
,那么我访问的地址就是:http://192.168.195.136
)