实验环境

Linux ubuntu 18.04 LTS
nginx 1.14.0

步骤

下载certbot

SSL证书有多个级别,价格上有免费到上千不等,如果只是一个个人站点、博客,那么使用certbot下的免费证书就好了。

# 获取certbot
wget https://dl.eff.org/certbot-auto
# 给予运行权限
chmod a+x certbot-auto

配置nginx强制https并开启http2

有自动/手动 两种方式,均亲测通过

手动方式

# 运行certbot
./certbot-auto --manual certonly

根据提示输入邮箱和域名,然后再在相应的目录下面创建文件,即可生成证书文件,在输出日志中会显示生成的路径

配置nginx.conf

http{
server {
    listen 443 ssl; # 监听443 开启https
    server_name  example.com; # 你的域名

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # 生成证书位置
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # 生成密钥位置

    # 对 ssl 进行优化
    ssl_session_timeout 5m;

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

    add_header X-Xss-Protection 1;

    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;

    ssl_prefer_server_ciphers on;

    # 反向代理配置
    location / {
            proxy_pass http://127.0.0.1:your_port; # 反向代理地址
            client_max_body_size    100m;  # 将nginx上传限制修改为100m
    }
}


server {
    listen 80;
    server_name example.com;
    return 301 https://example.com$request_uri; # http重定向https
}
}

生成的证书只有3个月的有效期,三个月后需要重新激活

./certbot-auto renew

自动方式

先手动配置nginx的http反代

http{
    server {

      listen 80;
      server_name example.com;

      location / {
            proxy_pass http://127.0.0.1:9000;
            client_max_body_size    100m;
      }
    }
}

运行certbot自动配置

./certbot-auto --nginx

然后根据提示填入相关信息就ok了,certbot将会自动为你修改nginx的配置
同样的,证书只有3个月的有效期,运行下面命令可以定期自动激活

./certbot-auto renew --dry-run

开启http2

对于nginx来说开启http2很简单,只需要在443端口监听上加一句http2就好了

listen 443 ssl http2;

检测站点是否使用http2:HTTP/2 Test

资料参考

用Certbot 获取和自动更新SSL证书


Keeping frank is the easiest way to keep it simple.