美文网首页
使用nginx配置SSL证书实现https访问

使用nginx配置SSL证书实现https访问

作者: wwqGrowing | 来源:发表于2018-10-08 17:39 被阅读0次

    这篇文章主要是以阿里云申请的SSL免费证书为例,通过nginx配置的方式,实现https安全访问网站,并通过nginx进行端口的映射,从而实现https访问应用服务的目的。

    本文目录:

    • 域名解析到服务器
    • 阿里云上申请免费SSL证书
    • nginx配置
    • SSL证书配置(ubuntun16.04)
    • nginx将访问映射到具体应用端口

    一、把域名解析到服务器

    登陆阿里云,在阿里云控制台-产品与服务-云解析DNS-找到需要解析的域名点“解析”,进入解析页面后选择【添加解析】按钮会弹出如下页面:



    主机记录填写自己的二级域名,记录值就是服务器ip地址,确认,域名解析成功。

    二、在阿里云上申请免费的SSL证书

    首先,打开aliyun购买SSL证书的地址,https://commonbuy.aliyun.com/spm=5176.2020520163.cas.1.12092b7aZwTIBO&commodityCode=cas#/buy

    可能会发现找不到免费版本的SSL证书,不用担心,只需要先选择一个域名,再选择Symantec品牌,这个时候,就会发现有免费版的证书了,购买即可



    购买成功后,回到管理界面,点击补全信息,输入刚刚映射的域名




    等待一段时间,等证书状态变为“已签发”后,SSL证书就申请成功了,点击下载,找到页签中Nginx/Tengine配置信息,并“下载证书 for Nginx”:

    三、服务器配置Nginx

    登陆到服务器,进行nginx的安装,在Ubuntu下安装Nginx有apt安装和源码安装的方式,本次使用apt安装,如果想安装最新版本的话,则只能使用源码安装,具体可以自行百度

    $ apt-get update  // 更新软件
    $ apt-get install nginx  // 安装nginx
    

    安装好的文件位置如下:
    /usr/sbin/nginx:主程序
    /etc/nginx:存放配置文件
    /usr/share/nginx:存放静态文件
    /var/log/nginx:存放日志
    如果想更加清楚Nginx的配置项放在什么地方,可以打开/etc/nginx/nginx.conf查看,
    如果要查看加载的是哪个配置文件,可以使用sudo nginx -t或者ps -ef | grep nginx命令进行查看
    通过这种方式安装的,会自动创建服务,会自动在/etc/init.d/nginx新建服务脚本
    如需重启nginx,用以下命令:

    $ service nginx stop // 停止
    $ service nginx start // 启动
    $ service nginx restart // 重启
    $ service nginx reload// 重新加载
    

    四、配置SSL证书

    ( 1 ) 在Nginx的安装目录/etc/nginx/下创建cert目录,并且将下载的全部文件拷贝到cert目录中。
    ( 2 ) 打开 Nginx 安装目录下 conf 目录中的 nginx.conf 文件,找到:

    # HTTPS server
    # #server {
    # listen 443;
    # server_name localhost;
    # ssl on;
    # ssl_certificate cert.pem;
    # ssl_certificate_key cert.key;
    # ssl_session_timeout 5m;
    # ssl_protocols SSLv2 SSLv3 TLSv1;
    # ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
    # ssl_prefer_server_ciphers on;
    # location / {
    #
    #}
    #}
    

    将其修改为:

    server {
        listen 443;
        server_name xxx.icarole.com; //域名
        ssl on;
        root html;   //对应静态文件目录,可以映射到你需要的目录
        index index.html index.htm;
        ssl_certificate   cert/214691357820877.pem; //证书的名字
        ssl_certificate_key  cert/214691357820877.key; //证书的名字
        ssl_session_timeout 5m;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
        location / {
            root html;
            index index.html index.htm;
        }
    }
    server {
        listen 80;
        server_name xxx.icarole.com;// 你的域名
        rewrite ^(.*)$ https://$host$1 permanent;// 把http的域名请求转成https
    }
    

    (3)配置完成后,检查一下nginx配置文件是否可用,有successful表示可用。

    $ sudo nginx -t // 检查nginx配置文件
    

    (4)配置正确后,重新加载配置文件使配置生效:

    $ nginx -s reload // 使配置生效
    

    至此,nginx的https访问就完成了,并且通过rewrite方式把所有http请求也转成了更加安全的https请求。

    五、Nginx将请求映射到具体应用端口

    如果项目中使用的是某些端口,则需要通过nginx将访问请求转发映射到对应的端口,只需将上面的配置做一些修改即可,具体配置如下:

    upstream testServer{
             server xxx.icarole.cn:6201;
           }
    server {
        listen 443;
        server_name xxx.icarole.com; //域名
        ssl on;
        root html;   //对应静态文件目录,可以映射到你需要的目录
        index index.html index.htm;
        ssl_certificate   cert/214691357820877.pem; //证书的名字
        ssl_certificate_key  cert/214691357820877.key; //证书的名字
        ssl_session_timeout 5m;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
        location / {
            root html;
            index index.html index.htm;
            proxy_pass http://testServer;  //对应上面的
        }
    }
    server {
        listen 80;
        server_name xxx.icarole.com;// 你的域名
        rewrite ^(.*)$ https://$host$1 permanent;// 把http的域名请求转成https
    }
    

    同样,通过sudo nginx -t 验证配置,然后重启nginx service nginx restart,再次访问xxx.icarole.cn,会发现已经将访问请求映射到了具体的端口,而且会跳转到https页面

    说明:

    • 因为我们这里申请的是开发版免费证书,所以一个证书仅支持一个域名认证,不支持通配符。
    • 如果是云服务器比如阿里云ECS,需要到阿里云ECS的管理后台的安全组,修改端口过滤规则把80端口和443端口开放才能访问到,如果是公司内部服务器,则需要确认服务器端口有没有开放,以及路由器有没有对端口做限制。

    相关文章

      网友评论

          本文标题:使用nginx配置SSL证书实现https访问

          本文链接:https://www.haomeiwen.com/subject/kqmjaftx.html