美文网首页
阿里云https+nginx服务搭建及配置

阿里云https+nginx服务搭建及配置

作者: lookphp | 来源:发表于2018-12-06 22:48 被阅读17次

    本文不会介绍https相关知识,只是把我创建https服务的过程分享出来,供读者参考。并且已经假设你已经购买了服务器和域名。

    购买证书

    • 通过控制台进入CA证书服务,点击右上角的购买证书,进入如下图的界面,选择免费1年的SymantecDV SSL

      image
    • 点击购买,一路点过去,然后回到证书服务主页,会出现一条订单信息,点击补全,如下图所示。

    image

    -然后按照要求,首先填写你要申请证书的完整域名(例如www.test.com,因为此证书为单域名,不能使用通配符);

    • 然后填写个人信息,值得注意的是需要勾选下图红圈包围的选项,让验证自动化进行,不用手动操作;然后下一步,完成信息补全,等待几分钟,验证就可以通过。
    image

    添加443端口(https)安全组规则

    • 为了安全,阿里云只开放了少部分的端口,像常见的80、443端口,都需要我们手动开启。在等待证书验证期间,你可以去检查一下你的服务器的安全组配置,看一下是否加入了443端口的链接,防止后面连接不上。创建的新规则如下图。
    image

    下载证书

    • 几分钟后,可以看到下图的状态。


      image
    • 选择为nginx制作的证书,并下载到本地。

    image

    配置nginx服务器

    • 把这个文件解压后,会有两个文件,分别为****.pem****.key(可以修改成你需要的名字),将这两个文件拷贝到你的Nginx根目录下的cert文件夹内(自己创建的,也可以命名成其他名字)。

    • 接下来就要配置Nginx服务器了。

    • 如果你配置了反向代理,就去conf.d目录下,修改你要配置https的conf文件。下面贴一个范例配置。

    • 其中端口80为http链接,设置为重定向https;端口443为https链接。

    upstream blog {
      server 127.0.0.1:8080;
    }
    server {
      listen 80;
      server_name www.test.com;
      return 301 https://$host$request_uri;
    }
    server {
        listen 443 ssl;
        server_name www.test.com;
        index index.html;
        ssl_certificate   /etc/nginx/cert/***.pem;
        ssl_certificate_key  /etc/nginx/cert/***.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 / {
        proxy_set_header  X-Forwarded-Host $host;
        proxy_set_header  X-Forwarded-Proto $scheme;
        proxy_set_header  X-Real-IP  $remote_addr;
        proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        expires off;
        sendfile off;
        proxy_pass http://test;
      }
    }
    

    修改防火墙规则

    • 打开配置文件 $ vim /etc/sysconfig/iptables 增加443端口
      -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
    • 重启iptables
      service iptables restart

    测试

    • 配置完以后运行nginx -t查看配置文件是否有误。
    • 如果通过了运行 nginx -s reload重新加载配置,去浏览器输入链接,此时成功进入https链接✌️。

    配置过程中遇到的问题及解决办法

    • 如何验证是否开启443端口?
      telent www.你的域名.com 443

    • Nginx 配置 Https 出现no "ssl_certificate" is defined in server listening on SSL port while SSL handshaking怎么处理?

    Solution:
    you should need to add following to nginx server block
    listen 443 default_server ssl;
    example:-
    server {
    listen 443 ssl;
    ssl_certificate /etc/nginx/cert/****.pem;
    ssl_certificate_key /etc/nginx/cert/****.key;
    }

    如上面所说,将server中的ssl声明复制一份到nginx.conf中的http模块中,或conf.d/default.conf中。http中声明的全局SSL证书只是个打酱油的,只是为了不让nginx报上述no “ssl_certificate” is defined的错误,真正生效的证书配置还是在server段。

    参考文档:

    相关文章

      网友评论

          本文标题:阿里云https+nginx服务搭建及配置

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