关于为什么升级https就不说了 一句话为了装逼
怎么买证书就不说了,穷人用的是阿里云提供的的塞门铁客的DV SSL免费版证书,阿里云每人可以申请20张DV SSL证书(一条200,括号内删除。。。一脸正经.gif)。
注意一个DV SSL只能验证一个域名,很坑的一点是这里说的是二级域名。即我申请的viking666.com 证书只能验证viking666.com 不能验证www.viking666.com也不能验证myblog.viking666.com(我这里不是为了打广告.一脸正经.gif)。
由于只是验证https的可用性,所以只申请了一个证书来验证viking666.com,别的域名如 www.viking666.com 和 myblog.viking666.com依旧采用http协议
进入aliyun控制台-我的证书-下载,是一个zip文件里面包含一个xxx.pem和xxx.key文件
很简单的配置,具体的参数是什么意思 可以参考我的另外一篇部署博客 uwsgi+nginx部署django项目
由于myblog.viking666.com和 www.viking666.com还是走的http协议,所以旧的配置依旧是可用的,只要删掉server_name中的 viking666.com就可以了
创建一个新的nginx配置文件,主体依旧采用旧的配置,但是跟上一节不同这里的server_name中只保留 viking666.com。还要加一句所以得都301重定向到 https中 return 301 https://$server_name$request_uri;全部配置如下
server { listen 80; server_name viking666.com; charset utf-8; # max upload size client_max_body_size 75M; # adjust to taste access_log /www/myblog/log/nginx_access.log; error_log /www/myblog/log/nginx_error.log; #告诉浏览器有效期内只准用 https 访问 add_header Strict-Transport-Security max-age=15768000; #永久重定向到 https 站点 return 301 https://$server_name$request_uri; location /media { alias /www/myblog/media/; } location /static { alias /www/myblog/static/; } # Finally, send all non-media requests to the Django server. location / { uwsgi_pass django_myblog; include /www/myblog/uwsgi_params; # the uwsgi_params file you installed } }创建一个新的nginx配置文件,里面的配置如下
server { listen 443; server_name viking666.com; charset utf-8; # max upload size client_max_body_size 75M; # adjust to taste access_log /www/myblog/log/nginx_access.log; error_log /www/myblog/log/nginx_error.log; #告诉浏览器不要猜测mime类型 add_header X-Content-Type-Options nosniff; ssl on; ssl_certificate /www/myblog/log/cert/214135044190984.pem; ssl_certificate_key /www/myblog/log/cert/214135044190984.key; # 缓存有效期 ssl_session_timeout 60m; # 可选的加密算法,顺序很重要,越靠前的优先级越高. ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; # 安全链接可选的加密协议 ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #在 SSLv3 或 TLSv1 握手过程一般使用客户端的首选算法,如果启用下面的配置,则会使用服务器端的首选算法 ssl_prefer_server_ciphers on; location /media { alias /www/myblog/media/; } location /static { alias /www/myblog/static/; } # Finally, send all non-media requests to the Django server. location / { uwsgi_pass django_myblog; include /www/myblog/uwsgi_params; # the uwsgi_params file you installed } }关于新加的配置已经注释的很仔细了,这里就不继续展开了。
修改好上述的nginx配置重启nginx一直启动失败,查看日志(systemctl status nginx.service -l)发现是报错Failed to start A high performance web server and a reverse proxy server这里注意到一点 nginx: [emerg] duplicate upstream "django_myblog" in /etc/nginx/sites-enabled/myblog_root.conf:2
感觉是这里的upstream冲突的,直接删掉其余的配置文件中的 upstream 只保留旧的那个文件中的(上面的我已删掉),重启搞定。
重启完打开viking666.com会发现已经是https的了但是静态文件全部失败,百度一下就知道https不能使用http的静态文件格式,我的bootstrap jquery等都是用的CDN,这里可以把这些资源下载下来,但是有点治标不治本,也可以修改协议从http修改为https可以了。但是因为有一些二级域名还是采用的http的协议 所以这个方法也不是很好,这里有个方法就是不写具体的协议他就会使用网站本身的协议。如在https的网站中引用http路径的js或css会导致不起作用,其形如:<script src="http://cdn.bootcss.com/bootstrap/3.3.0/css/bootstrap.min.css"></script>解决办法:将http:去掉,改为<script src="//cdn.bootcss.com/bootstrap/3.3.0/css/bootstrap.min.css"></script>
阿里云技术文档 这里在各个控制台里看,放不了链接 Nginx Http 重定向至 Https https网站引用http路径的js和css失效解决办法
相关资源:HTML5维京战争 游戏源码