網站通訊協議升級到HTTPS&HTTP2
為何要升級到HTTPS和HTTP2?
http://baijiahao.baidu.com/s?id=1602041305989767011&wfr=spider&for=pc
https://www.jianshu.com/p/67c541a421f9
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/jsonimage/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/jsonimage/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_timeout5m; 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