个人站点升级https体验.md

2022/4/12 实用工具

# 引言

相信大家都有过搭建个人站点的经历,有的小伙伴为了站点更好访问,还会配置对应的域名。我们都知道,http站点虽然能够满足我们的大部分要求,但是在安全性方面稍有欠缺。比如:

在非https的网站,chrome浏览器会自动提示不安全。所以倔友们,有域名的话,就先备案,然后一起升级你的站点吧!

# 准备工作

如上,我们必须先准备一个域名(买一个吧,不贵),并且为备案域名提交一些资料,比如我是在某云上买的域名,大概每年20块吧。

接着你要为你买的域名备案,这样你的域名才能正确绑定到你的云服务器(所以云服务器,也肯定要有哦)。

最后就是向你的域名供应商申请ssl证书啦,有了前面的准备工作以后,后面的都很简单了。

# 申请证书

比如我用的供应商,就能申请20个免费的ssl证书。先来说说我申请的3个证书的作用:

  1. api

用于服务于api,也可以理解为后端服务的域名。

  1. www

www的域名,用于主站点的展示。

  1. static

这里是我申请的oss域名,用于存放oss文件。

其实还可以申请其他的,比如db.xxx.com,redis.xxx.com,这样包括db、redis你都不用再记录对应的ip/port,方便是一个方面,安全也是另一个方面。

申请步骤很简单,按照上面的指示即可。我申请的api.xxx.com则是子域名的模式(xxx.com是我买的域名,api.xxx.com则是我可以任意定义的子域名,这个不收钱的)

PS: 申请证书一般是针对你已经配置好的解析记录来操作的,比如你要申请api.xxx.com,那就先要解析api.xxx.com => 你的ip地址。如果绕过这一步,ssl证书无法申请。

# 下载证书

申请完毕后,我们可以下载证书,供应商提供了多种部署方式的证书:

因为我比较常用nginx,所以这里就教大家使用nginx部署的方法。

下载完毕后,我们会拿到一个zip文件,里面有域名+编号的信息文件,共2个,一个key后缀一个pem后缀,稍后我们会用到。

这2个文件我们需要放入服务器,并在nginx里面配置好.

# 配置Nginx

由于本文不是重点介绍nginx的文章,所以这里假设大家会使用(但其实基本的配置也不难)

由于https默认端口是443,所以我们listen 443端口,并带上ssl选项。

  • server_name

    指的是通过什么地址访问的你这个服务,由于我们会对443开启多个server,所以这里用server_name区分。比如我有1台机器,api.xxx.com会走443端口,xxx.com也会走443端口,我们就分别配置server_name为api.xxx.com和xxx.com,再把他们转发到其他服务。(我个人理解nginx主要是一层代理)

  • ssl_certificate

    证书地址,我们需要把刚才提到的key和pem文件传到服务器某个路径,这里填写路径即可。

  • ssl_certificate_key

    同上。

    中间的内容基本都是固定写法(我也是copy的)

  • location

    这里配置的就是要转发的地方,比如我的前端服务是8008端口,这里localhost指的是本机,其实可以配置多个,由于我只有1台机器,所以这里就写做本机的8008端口。

    /代表所有路径,也就是只要是这个域名443端口的请求全部转发到localhost:8008,这样也就完成了一个https的配置工作。

    下面是参考配置:

http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    # Load modular configuration files from the /etc/nginx/conf.d directory.
    # See http://nginx.org/en/docs/ngx_core_module.html#include
    # for more information.
    include /etc/nginx/conf.d/*.conf;

    server {
        listen 80;
        server_name api.xxx.com; // 你的后端域名
        location / {
           proxy_pass http://localhost:7777;
        }

        // websocket转发
        location /ws {
            proxy_pass http://localhost:7777/ws;
            proxy_http_version  1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
        }
    }

    server {
         listen 443 ssl;
         server_name static.xxx.com;
       ssl_certificate                                 /etc/nginx/cert/7545717_static.xxx.com.pem;
       ssl_certificate_key                         /etc/nginx/cert/7545717_static.xxx.com.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_pass http://真正的地址;
        }
    
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52

今天的内容就介绍到这儿啦,有不懂的可以留言呀!~