纯离线的内网环境中使用 nginx 配置 ssl 并使用 https 访问网站。
对于服务器中 nginx 及其它环境的搭建,可参考我的该文章 Linux Centos7离线部署SpringBoot前后端分离项目
同时,该文章涉及的部分安装包已提供在以上文章的开头部分。
检查环境
进入 nginx 的安装目录(一般是 /usr/local/nginx
),检查是否有 ssl 模块
cd /usr/local/nginx # 进入 nginx 安装目录
cd /sbin # 进入 sbin 目录
./nginx -V # 查看 nginx 的版本及相关配置
V
一定要是大写,小写只显示版本号。如果出现configure arguments: --with-http_ssl_module
,则跳过该步骤。
安装 openssl
想要使用 ssl 配置 https,环境中必须有 openssl。openssl 下载地址:https://www.openssl.org/source/ 。也可以去官方的 release 上寻找更多版本下载:https://github.com/openssl/openssl/releases
由于之前已有留存 openssl 安装包,所以使用的
openssl-1.1.1u
版本,此次文章的演示也是如此。最新的openssl-3.x
可能与此版本存在不兼容情况,若出现额外问题,需自行解决。
上传 openssl 压缩包到指定的存放目录,例如我的存放目录:/data/software/nginx-deps
解压 openssl 压缩包
cd /data/software/nginx-deps
tar -zxvf openssl-1.1.1u.tar.gz # 解压 openssl 压缩包
cd openssl-1.1.1u
./config
如果执行 ./config
出现如下错误信息,需根据提示安装 perl5,若没有则跳过
安装 perl5
去 perl 官网下载:https://www.perl.org/get.html
上传到服务器,解压
tar -zxvf perl-5.38.2.tar.gz
cd perl-5.38.2 # 进入 perl 目录
然后执行命令
./Configure -des -Dprefix=$HOME/localperl
make
make install
这个过程可能会比较漫长,如果环境中缺失
gcc
等,也会出现莫名其妙的错误,nginx 的离线配置可参考我的另一篇文章:Linux Centos7离线部署SpringBoot前后端分离项目
等待安装完成之后,就可以重新回到 openssl 安装的部分了。
再次安装 openssl
perl5 安装完毕,回到 opennssl 目录下,继续执行之前的操作,此时就不会报错了
cd openssl-1.1.1u
./config
安装 ssl 模块
一般是没有 ssl 相关模块的,此时进入到 解压缩目录
注意:是解压缩目录,因为是离线安装,必定需要上传 nginx 的压缩包进行解压,然后执行完 ./configure
之后,一般才会将 nginx 安装到 /usr/local/nginx
路径下
此处以我的安装目录为例:解压缩 nginx 的目录是 /data/software/nginx
,安装后的目录是 /usr/local/nginx
,则此时我需要进入 /data/software/nginx
进行之后的操作
# 进入我的 nginx 解压缩目录
cd /data/software/nginx
# 执行如下命令
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
然后执行 make
命令
make # 此处切记不要执行 make install,否则会重新安装 nginx
执行完以上操作后,使用 xftp 等工具查看 nginx 目录,此时会发现目录下多出一个 objs 文件夹,文件夹内存在 nginx 文件
停止 nginx 服务,用 objs 下的 nginx 文件替换掉 /usr/local/nignx/sbin
目录下的 nginx 执行文件
cd /usr/local/nginx/sbin
./nginx -s stop # 停止 nginx 服务
cp /data/software/nginx/objs/nginx /usr/local/nginx/sbin # 替换掉 sbin 下的 nginx 文件
查看 nginx 是否已配置号 ssl 模块,出现 configure arguments: --with-http_ssl_module
,证明安装成功,如果此步就出现找不到 nginx.pid
的错误,可直接跳过看下边的解决方法。
./nginx -V
如果执行 -V
时出现权限补足,可给 nginx 文件提权
重启 nginx
./nginx
此时如果报错:nginx: [error] open() “/usr/local/nginx/logs/nginx.pid” failed (2: No such file or directory)
进入 logs 文件,发现 nginx.pid
确实没有了,执行如下命令
# 指定 nginx.conf 文件的位置
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
再次执行 ./nginx
即可
https 配置(80 跳 443)
此处就仅仅涉及 nginx.conf
文件了