nginx实现https访问

    技术2022-07-11  119

                         nginx实现https访问

    背景:

    项目背景是在开发APP发布平台,ios的安装包的下载和自动更新等操作需要https获取plist文件,所以需要通过配置nginx的SSL模块来支持HTTPS访问,也就是说,要做一个网站域名为 域名.com 要求通过HTTPS://域名.com进行访问.

    SSL英文名为Secure Socket Layer,安全套接字层。SSL是一种数字证书,它使用ssl协议在浏览器和web server之间建立一条安全通道,数据信息在client与server之间的安全传输.

     

    一,环境准备

    1.安装nginx,2.获取安全证书

     1.安装nginx(已安装可以跳过)

    第一步:下载nginx压缩包

    nginx官方下载地址:http://nginx.org/en/download.html

    wget命令下载:

    wget -c https://nginx.org/download/nginx-1.16.1.tar.gz

    注意:这一步最好在自己的目标目录进行操作,我一般是把压缩包下载到/usr/local目录下。

    第二步:配置nginx安装所需的环境

    1. 安装gcc

    安装 nginx 需要先将官网下载的源码进行编译,编译依赖 gcc 环境。安装指令如下:

    yum install gcc-c++

    2. 安装PCRE pcre-devel

    Nginx的Rewrite模块和HTTP核心模块会使用到PCRE正则表达式语法。这里需要安装两个安装包pcre和pcre-devel。第一个安装包提供编译版本的库,而第二个提供开发阶段的头文件和编译项目的源代码。安装指令如下:

    yum install -y pcre pcre-devel

    3.安装zlib

    zlib库提供了开发人员的压缩算法,在Nginx的各种模块中需要使用gzip压缩。安装指令如下:

    yum install -y zlib zlib-devel

    4.安装Open SSL

    nginx不仅支持 http协议,还支持 https(即在 ssl 协议上传输 http),如果使用了 https,需要安装 OpenSSL 库。安装指令如下:

    yum install -y openssl openssl-devel

    第三步:解压nginx压缩包并安装

    将压缩包进行解压

    tar -zxvf nginx-1.16.1.tar.gz

    解压之后,进入加压文件,即cd nginx-1.16.1。 然后进行配置,推荐使用默认配置,直接./configure就好了,如下图所示:

    第四步:编译安装nginx 这里和redis的编译安装比较类似,首先在当前目录(/usr/local/nginx-1.16.1)进行编译。输入make即可

    make

    然后回车,如果编译出错,请检查是否前面的4个安装都没有问题。 编译成功之后,就可以安装了,输入以下指令:

    make install

    ok,安装成功。 这时候返回上一级目录,就会发现多了nginx目录,接下来,启动nginx。

    第五步:启动nginx

    进入/usr/local/nginx/sbin目录,输入./nginx即可启动nginx

    ./nginx

    关闭nginx

    ./nginx -s quit 或者 ./nginx -s stop

    重启nginx

    ./nginx -s reload

    查看nginx进程

    ps aux|grep nginx

    设置nginx开机启动,只需在rc.local增加启动代码即可。

    vim /etc/rc.local

    然后在底部增加/usr/local/nginx/sbin/nginx

    nginx配置文件

    /usr/local/nginx/conf目录可修改nginx的配置文件 -> vim nginx.conf

    修改域名以及端口等

     2.ssl证书:

     1. 配置SSL模块首先需要CA证书,CA证书可以自己手动颁发也可以在阿里云申请,本人在腾讯云上申请的证书。

     2. 默认情况下ssl模块并未被安装,如果要使用该模块则需要在编译nginx时指定–with-http_ssl_module参数.

    获取证书:

    在成功购买域名并通过备案后

    1.进入控制台

    2.下载证书

    下载下来的文件:

    nginx文件下:

    二、实现nginx+https

    1.安装ssl模块

    正常安装nginx一般ssl模块并未被安装

    默认情况下ssl模块并未被安装,如果要使用该模块则需要在编译nginx时指定–with-http_ssl_module参数

    解决方案:

    nginx缺少http_ssl_module模块,编译安装的时候带上--with-http_ssl_module配置就行了,但是现在的情况是我的nginx已经安装过了,怎么添加模块,其实也很简单,往下看: 做个说明:我的nginx的安装目录是/usr/local/nginx这个目录,我的源码包在/usr/local/nginx-1.16.1目录

    (1)切换到源码包:

    cd /usr/local/nginx-1.16.1

    (2)配置信息:

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

    (3)配置完成后,运行make进行编译,千万不要进行make install,否则就是覆盖安装。

    make

    (4)然后备份原有已经安装好的nginx

    cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak

    (5)停止Nginx,正常命令直接 nginx -s stop就可以

    nginx -s stop

    如果关不掉,就直接Kill掉进程。ps aux | grep 进程名 查看进程占用的PID号。

    (6)将刚刚编译好的nginx覆盖掉原有的nginx

    cp /usr/local/nginx-1.16.1/objs/nginx /usr/local/nginx/sbin

    (7)启动nginx

    在路径:/usr/local/nginx/sbin下

    ./nginx

    (8)通过下面的命令查看是否已经加入成功。

    nginx -V

    2.在Nginx配置文件中安装证书

    文件说明:

    1. 证书文件“证书名称.crt‘’,包含两段内容,请不要删除任何一段内容。

    2. 如果是证书系统创建的CSR,还包含:证书私钥文件“证书名称.key”。

    ( 1 ) 在Nginx的配置文件所在的目录下创建cert文件夹,并且将下载的全部文件拷贝到cert目录中。如果申请证书时是自己创建的CSR文件,请将对应的私钥文件放到cert目录下并且命名为“证书名称.key”;

    ( 2 ) 打开 Nginx 安装目录下 conf 目录中的 nginx.conf 文件,找到:

    # HTTPS server # #server { # listen 443 ssl; # server_name localhost; # ssl_certificate cert.pem; # ssl_certificate_key cert.key; # ssl_session_cache shared:SSL:1m; # ssl_session_timeout 5m; # ssl_ciphers HIGH:!aNULL:!MD5; # ssl_prefer_server_ciphers on; # location / { # root html; # index index.html index.htm; # } #}

    ( 3 ) 将其修改为 (以下属性中ssl开头的属性与证书配置有直接关系,其它属性请结合自己的实际情况复制或调整) :

    server { listen 8095 ssl; server_name localhost; ssl_certificate cert/1_luckilye.cn_bundle.crt; ssl_certificate_key cert/2_luckilye.cn.key; ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; location / { root html; index index.html index.htm; } location /file/ipaPlist/{ proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://47.92.27.**:8086/file/ipaPlist/; } }

    ( 4 )重启 Nginx。

    nginx -s reload

    ( 5 ) 通过 https 方式访问您的站点,测试站点证书的安装配置。 在浏览器中输入https://域名,如下图所示,则说明配置成功。

    在配置时有可能碰到的错误:

    nginx 报错 : [warn] the "ssl" directive is deprecated, use the "listen ... ssl" directive instead

    解决:

    1. 如果配置了SSL ON请删掉

    2.

    listen 443;

    修改为

    listen 443 ssl;

    Processed: 0.010, SQL: 9