网站通信协议升级到HTTPS&HTTP2
为何要升级到HTTPS和HTTP2?
http://baijiahao.baidu.com/s?id=1602041305989767011&wfr=spider&for=pc
https://www.jianshu.com/p/67c541a421f9
https://segmentfault.com/a/1190000019891825
HTTPS
一、所需条件
- 域名
- Web服务器(Nginx,Apache,IIS都行)
- SSL证书(可通过腾讯云、阿里云等申请)
- 需要Nginx支持SSL(命令nginx -V中,如果出现 ‘-with-http_ssl_module’ 字样即可)
二、操作步骤
- 登录阿里云购买免费SSL证书并申请
- 下载证书,上传至服务器
- Nginx配置HTTPS服务
- 重定向
- 重启Nginx服务
- 将html中所有的外链资源(如img,css,js,媒体标签等)url置为https
三、具体操作
1.登录阿里云购买免费SSL证书(https://www.aliyun.com/product/cas?utm_content=se_1001656059)
阿里云免费型DV SSL有效期1年,购买后填写一些信息,提交申请,即可等待签发。在这里表扬一下阿里云,秒速签发。
在这里讲一下,域名验证类型可选择自动DNS、手动DNS和文件验证,在这里我选择的是自动的;CSR生成方式选择系统生成。
验证阶段,根据提示,要将域名添加一条DNS解析记录,这里要注意,要去申请域名的网站去操作。比如我的服务器买的阿里云,域名在新网买的,所以要去新网去设置,而不是在阿里云。
2.下载SSL证书并上传至服务器
选择Nginx版本证书,在nginx安装目录(一般在/etc/nginx)中新建文件夹(cert),放置证书
3.Nginx配置HTTPS服务
server { # 这个server标识我要配置了 listen 80 default_server; # 我要监听那个端口 listen [::]:80 default_server; server_name xxx.cn ; # 你访问的路径前面的url名称 access_log /var/log/nginx/access.log main; # Nginx日志配置 charset utf-8; # Nginx编码 gzip_types text/plain application/x-javascript text/css text/javascript application/x-httpd-php application/json text/json image/jpeg image/gif image/png application/octet-stream; # 支持压缩的类型 # 注意添加下面这行代码,用于重定向 return 301 https://$server_name$request_uri; error_page 404 /404.html; # 错误页面 error_page 500 502 503 504 /50x.html; # 错误页面 # 指定项目路径uwsgi location / { # 这个location就和咱们Django的url(r'^admin/', admin.site.urls), include uwsgi_params; # 导入一个Nginx模块他是用来和uWSGI进行通讯的 uwsgi_connect_timeout 30; # 设置连接uWSGI超时时间 uwsgi_pass unix:/data/wwwroot/script/uwsgi.sock; # 指定uwsgi的sock>文件所有动态请求就会直接丢给他 } # 指定静态文件路径 location /static/ { alias /data/wwwroot/maci_proj/static/; #index index.html index.htm; } } server { listen 443 ssl http2 default_server; listen [::]:443 ssl http2 default_server; server_name www.xxxxx.cn ; access_log /var/log/nginx/access.log main; # Nginx日志配置 charset utf-8; # Nginx编码 gzip_types text/plain application/x-javascript text/css text/javascript application/x-httpd-php application/json text/json image/jpeg image/gif image/png application/octet-stream; # 支持压缩的类型 ssl_certificate /etc/nginx/cert/2050124_xxx.pem; # pem文件 ssl_certificate_key /etc/nginx/cert/2050124_xxx.key; # key文件 ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; error_page 404 /404.html; # 错误页面 error_page 500 502 503 504 /50x.html; # 错误页面 # 指定项目路径uwsgi location / { # 这个location就和咱们Django的url(r'^admin/', admin.site.urls), include uwsgi_params; # 导入一个Nginx模块他是用来和uWSGI进行通讯的 uwsgi_connect_timeout 30; # 设置连接uWSGI超时时间 uwsgi_pass unix:/data/wwwroot/script/uwsgi.sock; # 指定uwsgi的sock>文件所有动态请求就会直接丢给他 } # 指定静态文件路径 location /static/ { alias /data/wwwroot/maci_proj/static/; #index index.html index.htm; } }
4.重定向
将所有http请求重定向为https,如上面配置所述。
有三种重定向方式:
- rewrite ^/(.*)$ https://example.com/$1;
- rewrite ^ https://example.com$request_uri? permanent;
- return 301 https://example.com$request_uri;
唯一的区别:正则匹配的性能。第三种性能最优,第一种差一些。然而对于业余的我,完全体会不到。
5.重启Nginx服务
nginx -t nginx -s reload
6.前端页面外链资源url全部改成https协议
否则浏览器仍会提示不安全的连接
对于这些资源,能够使用https的则使用,如果不能使用可以将其下载到自己的服务器上。
HTTP2
一、所需条件
1、openssl 1.0.2+
openssl version //查看版本的命令
2、升级HTTPS
· 3.Nginx 1.9.5+ 且 支持
nginx -V # 查看版本
二、修改Nginx配置文件
原本的https的listen为
listen 443 ssl;
现在在后面加上http2:
listen 443 ssl http2 default_server;
重启Nginx
nginx -t nginx -s reload
在浏览器中可以查看到协议
FireFox
chrome