• 网站配置https(腾讯云域名操作)


    我们都知道http协议是超文本传输协议,早期的网站使用的都是http,但是并不安全,数据在传输过程中容易被拦截篡改。所以后面有了https,也就是经过ssl加密的http协议。本文主要对网站配置https做一个总结,对https的概念不做具体介绍,想了解的可以参考百度百科或者维基百科中的介绍。

    获得 SSL 安全证书

    要想配置https,首先要获取ssl证书。常见的有 Godaddy 、 GlobalSign等收费机构签发的证书,当然也有 ISRG ( Internet Security Research Group )推出的免费证书Let’s Encrypt,不过要每三个月更新一次。当前网站用的就是Let’s Encrypt免费证书。

    采用Let’s Encrypt证书配置https,最简单的办法就是Certbot,但是由于腾讯云的域名解析服务器有防火墙限制,导致执行./certbot-auto certonly命令的时候,一直没办法解析域名。

    无奈只好采用其它办法。腾讯云其实自己有封装一套获取Let’s Encrypt证书的方法。
    具体详见:腾讯云DNSPod API申请Let’s Encrypt泛域名证书

    按照步骤操作到最后一步就成功了一半了,然后就是怎么使用这些证书。详情可以参考
    证书安装指引。我的网站用的是nginx做的方向代理。按照指导配置如下:

    server {
            listen 80;
            server_name  www.iwillhaveacatoneday.cn;
            rewrite ^(.*) https://$server_name$request_uri permanent;   
        }
    
    server {
            listen 443;
            server_name www.iwillhaveacatoneday.cn; #填写绑定证书的域名
            ssl on;
            ssl_certificate 1_iwillhaveacatoneday.cn_bundle.crt;
            ssl_certificate_key 2_iwillhaveacatoneday.cn.key;
            ssl_session_timeout 5m;
            ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #按照这个协议配置
            ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;#按照这个套件配置
            ssl_prefer_server_ciphers on;
            location ^~ /static/ {
                  root /usr/share/nginx/html;
             }
             location / {
                 proxy_pass http://backend$request_uri;
                 proxy_set_header  Host $host:$server_port;
                 proxy_set_header  X-Real-IP  $remote_addr;
                 client_max_body_size 10m;
            }
        }
    

    艰难踩坑

    一波三折,好不容易获取证书,配置完nginx.conf。在重启nginx后,又遇到问题

    Job for nginx.service failed because the control process exited with error code. See "systemctl status nginx.service" and "journalctl -xe" for details.
    

    根据提示我们执行systemctl status nginx.servicesystemctl命令),从打印出来的日志我们发现了错误

    nginx: [error] open() "/usr/local/var/run/nginx.pid" failed (2: No such file or directory)
    

    看来是nginx.pid文件丢失导致无法停掉nginx进程。
    解决方案详见 Nginx 重启时丢失nginx.pid文件解决方法
    我们直接简单粗暴用pkill -9 nginx停掉了Nginx,然后重启,顺利启动。

    激动地在浏览器输入域名,回车,结果显示拒绝了我们的连接请求。WTF???明明我都可以通过ssh连接到服务器,拒绝连接请求什么鬼。不过仔细一想可能是是因为装了防火墙,把443端口给禁了,导致HTTPS服务没法访问。

    因为腾讯云的安全组不是很好用,经常开发了端口结果没生效,当时就把安全组的端口全部暴露了,然后自己装了firewalld。所以只需要把firewalld的443端口开发就好

    firewall-cmd --list-ports    #查看防火墙开放的端口
    firewall-cmd --zone=public --add-port=443/tcp --permanent    #防火墙添加443端口
    firewall-cmd --reload    #重启防火墙
    

    然后重启Nginx,刷新页面,结果又报错了(活着好难。。。)

    502 bad gateway
    

    这回nginx应该没啥问题,估计是网站挂了,于是跑去看日志,果然发现一堆异常,程序貌似没有成功启动。为了确认,看下有没有网站的进程

    ps -ef|grep solo
    

    果然没有进程。重启网站后,再刷新,终于看到熟悉的首页,https成功配置完成。

    阅读原文

  • 相关阅读:
    关闭NanoPi网卡指示灯(RTL8211E)
    C++有关mutable与const的使用
    全面理解JSX
    Typescript 面向对象 类和接口 属性访问权限 const、readonly和private
    ES6 Iterator迭代器 与 Generator生成器 如何用js封装一个遍历所有可迭代数据结构的方法
    Redux基础必知必会 reducer拆分 中间件 单向数据流
    TypeScript 泛型
    如何实现一个promise
    深入React源码理解ReactElement到底做了什么
    Redux applyMiddleWare 中间件
  • 原文地址:https://www.cnblogs.com/MarsCheng/p/9734406.html
Copyright © 2020-2023  润新知