如何在Nginx 裡面設定強制使用HTTPs

作者:

分類:

創完這個網站之後,每次只要我輸入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

  1. http://nginx.org/en/docs/http/converting_rewrite_rules.html []
  2. https://serverfault.com/a/474345 []

留言

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *