廖雪峰的python教程web实战学习笔记day18 vvipi 发表于2019年2月18日,阅读:4437 ### 为何要开启https加密连接 - 安全;开启后可以有效防止流量劫持、隐私泄露。 - 提升信任;未开启https的网站会被标记为不安全网站,开启后可提升用户信任感。 - 提升搜索排名;搜索引擎对开启https的网站更加友好。 ### 开启https加密是否很难? 博主一度也认为开启https很麻烦,搜索浏览大量相关文章后发现,经过各路大佬们开发分享,现在开启https已经是免费且很容易实现的。 本站使用[acme.sh](https://github.com/Neilpang/acme.sh/wiki/%E8%AF%B4%E6%98%8E "acme.sh")。 acme.sh 实现了 acme 协议, 可以从 letsencrypt 生成免费的证书,并可以定期自动更新,简直新手福音。 ### 主要流程 下面介绍基于廖雪峰老师的python教程部署webapp后开启https的流程。 1、安装 acme.sh 2、生成证书 3、安装证书到nginx目录 4、配置nginx #### 1、安装 acme.sh 建议全程使用root用户,避免不必要的麻烦。 `curl https://get.acme.sh | sh` 安装完成后可在`~/.acme.sh/`目录看到生成的相关文件。 #### 2、生成证书 `acme.sh --issue -d www.wepin.online --nginx` 其中 www.wepin.online 替换成你的网站。 由于廖老师的webapp使用nginx服务器,这里选择nginx验证方式。当然也可以用dns模式 登陆自己的 DNSPod 控制台,点击自己头像,选择密钥管理,添加一个密钥,将 ID 和 Token 记录下来。 然后在bash执行下面的命令 ``` export DP_Id="你的id" export DP_Key="你的密钥" acme.sh --issue --dns dns_dp -d www.wepin.online -d *.wepin.online ``` #### 3、安装证书到nginx目录 `acme.sh --installcert -d www.wepin.online --key-file /etc/nginx/ssl/wepin.key --fullchain-file /etc/nginx/ssl/fullchain.cer --reloadcmd "service nginx force-reload"` 此命令将生成的证书安装到/etc/nginx/ssl目录下,若该目录不存在,先创建目录后再安装。 #### 4、配置nginx 出于安全考虑,acme.sh的作者在安装时没有直接修改我们的nginx配置,需要自行修改。我们只需要原本监听http 80端口的服务自动跳转到https的地址,同时增加监听https 443端口的服务即可。配置如下: ``` server { listen 80; # 监听80端口 server_name wepin.online www.wepin.online; # 强制将http重定向到https rewrite ^ https://www.wepin.online$request_uri? permanent; } server { listen 443 ssl; # 监听443端口 server_name wepin.online www.wepin.online; # 不带www的域名直接跳转到www域名 if ( $http_host != 'www.wepin.online' ) { rewrite ^ https://www.wepin.online$request_uri? permanent; } # 证书和key所在的目录 ssl_certificate /etc/nginx/ssl/fullchain.cer; ssl_certificate_key /etc/nginx/ssl/wepin.key; root /srv/awesome/www; access_log /srv/awesome/log/access_log; error_log /srv/awesome/log/error_log; # 处理静态文件/favicon.ico: location /favicon.ico { root /srv/awesome/www; } # 处理静态资源: location ~ ^\/static\/.*$ { root /srv/awesome/www; } # 动态请求转发到9000端口: location / { proxy_pass http://127.0.0.1:9000; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } ``` 配置修改完成后,运行`/etc/init.d/nginx reload`重启nginx服务,完成。
vvipi (作者)评论于2019年5月19日 今天发现证书过期不能自动更新,试了一下应该是因为我强制将http重定向到https的原因,导致重新生成证书的过程验证网站时连接失败。于是我先把nginx的配置恢复成非https时的配置,重新生成、安装证书之后恢复正常了。