因为阿里云的云主机在没有备案的情况下(备案比较复杂且无用), 80端口是关闭的, 这就导致想访问你的网址就必须在域名后加上端口号,非常不优雅.然而https默认监听443端口,这就给了我们一个方法去优雅的开放网站.
如果我们要启用 HTTPS,就需要从证书授权机构(以下简称 CA ) 处获取一个证书,Let's Encrypt 就是一个 CA。
Let's Encrypt 是一个免费、开放,自动化的证书颁发机构。
Certbot 是 Let’s Encrypt 官方推荐的证书生成客户端工具
安装Certbot
git clone https://github.com/certbot/certbot
或者
sudo apt-get install certbot
获取证书
Certbot 获取证书有两种方式
webroot模式
这种模式适用于80端口在用且服务已经在运行的情况
sudo certbot certonly --webroot -w /var/www/example -d example.com --agree-tos --email 你的@邮箱.com
这种模式会在 /var/www/example 中创建 .well-known 文件夹,这个文件夹里面包含了一些验证文件,letsencrypt 会通过访问 example.com/.well-known/acme-challenge 来验证你的域名是否绑定的这个服务器
-
--email
指定账户 -
--agree-tos
同意服务协议
standalone模式
这种模式适用于80端口无法启用或者已启用服务没有根目录的情况
sudo certbot certonly --standalone -d example.com --agree-tos --email 你的@邮箱.com
ps.此模式需先关闭443端口在用的nginx,不然会出现错误:
Problem binding to port 443: Could not bind to IPv4 or IPv6.
证书申请成功后会提示证书的文件路径,以及证书到期时间:
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/zhengwuyang.top/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/zhengwuyang.top/privkey.pem
Your cert will expire on .......
zhengwuyang.top即为你的域名
nginx配置
在配置文件中加入
listen 443;
ssl on;
ssl_certificate /etc/letsencrypt/live/zhengwuyang.top/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/zhengwuyang.top/privkey.pem;
zhengwuyang.top即为你的域名
重启nginx就大功告成