nginx实现https访问

                     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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值