創完這個網站之後,每次只要我輸入lee1ay.com,左上角都會顯示不安全,我就覺得不舒服,因為我明明已經設定好HTTPS,為什麼就不能讓我用HTTPS,所以這邊來設定強制使用HTTPS
參考這篇回答的,根據官方文檔1 最好的方式是使用return,但是要記得return不能跟listen 443在同一個block,必須要像下面這樣
server {
listen 80;
server_name example.com www.example.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 default_server ssl;
server_name www.example.com;
ssl_certificate /path/to/my/cert;
ssl_certificate_key /path/to/my/key;
}
如果不想要放到另一個block 的話也可以像下面這樣2
server {
listen 80;
listen [::]:80;
listen 443 default_server ssl;
server_name www.example.com;
ssl_certificate /path/to/my/cert;
ssl_certificate_key /path/to/my/key;
if ($scheme = http) {
return 301 https://$server_name$request_uri;
}
}
這邊稍微解釋裡面的意思。$scheme,$server_name,$request_uri
這三個都可以在文檔中找到。
在 URI (Uniform Resource Identifier) 中,”scheme” 指的是 URI 的協定部分,通常是 URI 字符串的開頭部分,用來指定要使用哪種協定來存取資源。URI 的 scheme 部分通常是由一個或多個字母組成,並跟隨著一個冒號 “:”。一些常見的 URI scheme 包括:
- http:用於訪問 Web 上的資源,例如網頁。
- https:與 http 相同,但使用安全的 SSL/TLS 加密連線。
- ftp:用於在網路上傳輸檔案。
- mailto:用於在電子郵件客戶端中開啟新郵件,並填寫收件人地址。
- file:用於訪問本地檔案系統中的檔案。
透過 scheme,瀏覽器或其他應用程式能夠識別 URI 資源所使用的協定類型,並選擇相應的協定處理程序來存取該資源。
301表示永久轉向,後面接的是跳轉到的頁面,也就是使用https的。所以return 301 加上後面的那一行白話解釋就是,當用http協定連線進來時,就向client回傳301並讓client跳轉到後面的網址。而$request
_uri 代表的是client所輸入的內容,假設我輸入 lee1way.com/page/page?=1
,那$request
_uri就是page/page?=1
。