Nginx 支持 HTTPS
本文意在说明如何在内网环境中使用 Nginx 支持 HTTPS 方式访问项目
安装 openssl
官网:openssl.org
下载链接:https://www.openssl.org/source/openssl-1.1.1l.tar.gz
## 创建文件夹
mkdir /home/archser/soft/
## 将软件上传到服务器的 openssl 文件夹中、解压
tar -xzvf openssl-1.1.0-pre1.tar.gz
## 进入文件夹
cd openssl-1.1.0-pre1
## 自动配置 --prefix=/usr/local/openssl 在特殊情况也可以不写,但是会导致找不到 libssl.so.1.1 ,后面也有解决方式
./config --prefix=/usr/local/openssl
## 编译
make
## 安装
make install
生成证书
# 1、首先,进入你想创建证书和私钥的目录,我直接进入openssl-1.1.1l目录,比较方便
cd /home/archser/soft/openssl-1.1.1l
# 2、创建服务器私钥,会让你输入一个口令,输入完之后会生成 server.key
openssl genrsa -des3 -out server.key 1024
# 3、创建签名请求的证书(CSR):这里会让确认很多配置,全部直接回车即可,生成 server.csr,
# Common Name 要特别注意, 要用你服务器的域名,我们测试用ttt.com
openssl req -new -key server.key -out server.csr
# 4、在加载SSL支持的Nginx并使用上述私钥时除去必须的口令:
cp server.key server.key.org
openssl rsa -in server.key.org -out server.key
# 5、最后标记证书使用上述私钥和CSR: 生成 server.crt
openssl x509 -trustout -req -days 365 -in server.csr -signkey server.key -out server.crt
检查 Nginx 插件情况
[root@MiWiFi-R3600-srv soft]# nginx -V
nginx version: nginx/1.14.2
built by gcc 4.8.5 20150623 (NeoKylin 4.8.5-39) (GCC)
configure arguments: --prefix=/home/archser/soft/nginx
## 如果出现 (configure arguments: --with-http_ssl_module), 说明已安装,
## 但是使用这个文档的情景应该都没有安装过的
配置 Nginx 的 ssl
一般情况下都是不存在ssl模块的,接下来进入到你的解压缩后的nginx目录,注意这里不是nginx安装目录,是解压缩后的目录,进入目录执行:
## 配置ssl 模块,进入解压缩后的nginx目录
## 如果前面执行 ./config --prefix=/usr/local/openssl 的时候没有加入后面的文件路径,可能会报找不到文件
## 解决方案:指定文件夹路径
##./configure --prefix=/home/archser/soft/nginx --with-http_ssl_module --with-openssl=/home/archser/soft/openssl-1.1.1l
./configure --prefix=/home/archser/soft/nginx --with-http_ssl_module
## 接下来执行
make
## 切记不要执行 **make install**,否则会重新安装 nginx,会覆盖之前的配置
上述操作执行完成以后,你的目录下会出现 objs 文件夹,文件夹内存在 nginx 文件
需要将之前的 nginx 备份,将 objs 文件夹中的 nginx文件复制到之前的Nginx文件夹中
## 进入原本 Nginx 的 sbin 目录
cd /home/archser/soft/nginx/sbin/
## 备份文件
cp nginx nginx.bck
## 复制新的 nginx 文件
cp /home/archser/soft/nginx-1.14.2/objs/nginx ./
Nginx 支持 HTTPS
## 备份原始配置文件
cd /home/archser/soft/nginx/conf/
cp nginx.conf nginx.conf.backup
## 修改配置文件,将下面的内容加入到 nginx.conf 文件中的 http 的大括号中
server {
listen 443 ssl;
server_name localhost1;
ssl on;
## 下面是我们之前生成的文件的位置
ssl_certificate /home/archser/soft/openssl-1.1.1l/server.crt;
ssl_certificate_key /home/archser/soft/openssl-1.1.1l/server.key;
ssl_session_timeout 5m;
location / {
root html;
index index.html index.htm testssl.html;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
测试 nginx 配置是否正常: nginx -t
重启 nginx ,reload 可能会不生效,建议停止之后重启:
nginx -s stop
nginx
使用 https 访问服务器,不用加端口号,https 默认端口号是 443
会出现提示连接不是专用连接的情况,点击 高级 --> 继续访问 即可
遇到的问题
没有 libssl.so.1.1 这个文件
这个问题的原因是 openssl 需要 libssl.so.1.1,但是有的服务器上使用的相关文件不是这个版本,所以会报没有这个文件
[root@MiWiFi-R3600-srv key]# openssl genrsa -des3 -out server.key 1024 openssl: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory
解决方案:
## 是因为在配置 openssl 的时候没有指定配置路径,操作系统找不到文件## 可以为文件生成软连接去解决这个问题ln -s /home/archser/soft/openssl-1.1.1l/libssl.so.1.1 /usr/lib64/libssl.so.1.1ln -s /home/archser/soft/openssl-1.1.1l/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1
需要安装 openssl
问题原因是服务器中确实 openssl 的环境
百度上都是使用 yum 安装的,执行 yum -y install openssl openssl-devel
但是我们的项目现场可能无法使用 yum
解决方案:指定 openssl 的路径
./configure --prefix=/home/archser/soft/nginx --with-openssl=/home/archser/soft/openssl-1.1.1l --with-http_ssl_module