之前將自己所有的 `Http` 站點全部更新為 `Https` 站點,但是在請求後臺介面服務的時候還是 `Http` 請求,導致部署之後,直接在控制台報 `This request has been blocked; the content must be served over HTTPS;` 的... ...
問題分析
之前將自己所有的 Http
站點全部更新為 Https
站點,但是在請求後臺介面服務的時候還是 Http
請求,導致部署之後,直接在控制台報 This request has been blocked; the content must be served over HTTPS;
的錯誤
解決思路
因為我不想耗費精力,將所有的後臺介面服務也更新為支持 Https
請求,所以訪問了一些資料之後,發現了一個非常巧妙的思路,省時省力解決這個問題。
那就是直接使用Nginx將後臺介面服務的 http
請求地址代理到前端 Https
站點的一個目錄下,經過Nginx這一層將後臺介面服務的 Http
請求包裝成 Https
請求
舉個慄子
- 比如你之前的後臺介面服務請求地址是:
http://bbb.com
(甚至你的請求地址是ip+埠
都沒關係) - 然後你的前端站點部署的功能變數名稱是:
https://aaa.com
- 你可以通過修改Nginx配置,將後臺介面服務的地址轉發到前端功能變數名稱地址的一個目錄下,比如:
https://aaa.com/bbb-api
- 這樣就可以讓Nginx幫你完美解決
http
請求無法訪問https
站點的問題~~~牛逼o( ̄▽ ̄)d
Nginx配置示例
這裡沒有放出全部的配置示例,因為只需要修改前端功能變數名稱中443埠的監聽配置即可
server
{
listen 443 ssl;
server_name aaa.com;
ssl_certificate /etc/ssl/aaa.com.crt;
ssl_certificate_key /etc/ssl/aaa.com.key;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;
# 這裡是前端https站點的配置
location / {
proxy_pass http://ip:埠;
}
# 這裡是轉發到另一個後臺http請求的配置,也可以直接用ip+埠
location /bbb-api/ {
proxy_pass http://bbb.com/;
}
}
我是 fx67ll.com,如果您發現本文有什麼錯誤,歡迎在評論區討論指正,感謝您的閱讀!
如果您喜歡這篇文章,歡迎訪問我的 本文github倉庫地址,為我點一顆Star,Thanks~