已经部署的nginx添加ssl证书服务实现https解析

218 阅读4分钟

如标题所示,在项目开发过程中想提高一下网络安全或一些特殊需求需要使用https,需要将服务器的nginx添加ssl链接实现https解析。

准备工作

阿里云提供一个免费的ssl证书服务,如下图

个人测试证书每隔3个月需要手动更新下证书的key和pem

image.png

申请证书

证书审核通过后状态会更新为已签分状态,点击下载选择nginx服务证书格式即可 image.png

image.png

证书具体申请流程可以看相关掘金帖子juejin.cn/search?quer…

防火墙配置

由于我购买的是阿里云ecs服务器,所以在云服务器的安全组中入口和出口规则添加443端口。

image.png

nginx配置

获取到证书文件后,阿里云官方也提供一个部署文档,(我参考这个部署nginx也出现问题缺少环境),还是按照自己的节奏,先登录服务器,进入正在使用的nginx目录,以我目前的nginx所在位置为例子,创建一个path文件夹,将下载的证书文件上传到该文件夹中。

image.png

配置nginx.config文件

进入nginx工作目录,以我当前项目为例,进入路径/usr/local/nginx/conf/nginx.conf,添加ssl的443解析端口,指定证书路径和访问的文件路径。

    # HTTPS server
    server {
        listen 443 ssl;
        server_name ailzc.cn;
        
        # 证书路径
        ssl_certificate path/ailzc.cn.pem;
        ssl_certificate_key path/ailzc.cn.key;
        
 
        ssl_session_cache shared:SSL:1m;
        ssl_session_timeout 5m;
        
        # 加密方式,越多兼容性越差,安全性越高
        ssl_ciphers HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers on;
    

    
        # 添加其他 Nginx 配置(根据你的需要)
        location / {
                root   /home/vuepress-doc/;
               index index.html index.htm;
        }
    }

image.png

添加openssl模块

已经编译的nginx实现https核心添加with-http_ssl_module模块,可以通过./nginx -V 查看是否包含这个模块。

[root@VM-0-5-centos sbin]# ./nginx -V
nginx version: nginx/1.10.3
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) 
configure arguments: --prefix=/usr/local/nginx --conf-path=/usr/local/nginx/conf/nginx.conf

查询结果很明显没有with-http_ssl_module模块,需要下载安装openssl组件,在构建的时候才能使用with-http_ssl_module模块 找寻home文件夹下载openssl组件,并解压它

wget https://www.openssl.org/source/openssl-1.1.1.tar.gz
tar -zxvf openssl-1.1.1.tar.gz

image.png

解压完成后,进入到最初下载安装nginx源文件中,我的项目之前的nginx源文件路径/home/nginx-1.18.0所以进入 该文件下执行,下面命令,重新编译启动命令在./configure中加入--with-http_ssl_module,并将with-openssl指向刚刚下载解压的/home/openssl-1.1.1文件

./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-openssl=/home/openssl-1.1.1

image.png

解决缺少环境变量gcc

编译安装在执行./configure步骤报错,提示因为缺少环境变量gcc,又通过命令查询,发现变量存在,通过卸载重新安装gcc的方式解决该问题,重新执行./configure

[root@iZ2vce7h83cpide1n6l956Z nginx-1.18.0]# whereis gcc 查询gcc
gcc: /usr/bin/gcc /usr/lib/gcc /usr/libexec/gcc /usr/share/man/man1/gcc.1.gz
[root@iZ2vce7h83cpide1n6l956Z nginx-1.18.0]# yum remove gcc -y  //卸载gcc
[root@iZ2vce7h83cpide1n6l956Z nginx-1.18.0]# yum install gcc -y  //安装gcc

### 编译生成nginx文件
重新执行
[root@iZ2vce7h83cpide1n6l956Z nginx-1.18.0]# ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-openssl=/home/openssl-1.1.1

编译nginx完成后在/home/nginx-1.18.0/objs路径下看到生成的nginx,备份当前正在工作的nginx二进制文件,将新生成的nginx放在工作nginx环境中,并进行校验检查nginx文件是否正常

//备份旧的文件
[root@iZ2vce7h83cpide1n6l956Z nginx-1.18.0]# cp /usr/local/nginx/sbin/nginx  /usr/local/nginx/sbin/nginx.bak
//将新构建的文件放到nginx工作目录中
[root@iZ2vce7h83cpide1n6l956Z nginx-1.18.0]# cp /home/nginx-1.18.0/objs/nginx  /usr/local/nginx/sbin/nginx
//检查校验下nginx文件是否正常
[root@iZ2vce7h83cpide1n6l956Z nginx-1.18.0]# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

         image.png

image.png

重启nginx服务

关闭nginx进程,进行重启nginx服务,如下图查询nignx进程进行杀死,再重启服务

# 获取当前nginx的主进程pid
[root@iZ2vce7h83cpide1n6l956Z sbin]# ps -ef | grep nginx
 #杀死主进程
[root@iZ2vce7h83cpide1n6l956Z sbin]# kill  进程ID
启动nginx服务
[root@iZ2vce7h83cpide1n6l956Z sbin]# sudo /usr/local/nginx/sbin/nginx

image.png

image.png

访问页面

访问相关服务看页面是否正常,下图1是更新前,图2是更新之后

image.png

image.png

参考文档

blog.csdn.net/weixin_4437…

www.cnblogs.com/bq-med/arti…

www.jb51.net/server/3055…

www.cnblogs.com/NoneID/p/10…