Nginx

如何在 nginx 中強製或重定向到 SSL?

  • April 20, 2018

我在子域上有一個註冊頁面,例如:https://signup.example.com

它應該只能通過 HTTPS 訪問,但我擔心人們可能會通過 HTTP 偶然發現它並獲得 404。

我在 nginx 中的 html/server 塊如下所示:

html {
 server {
   listen 443;
   server_name signup.example.com;

   ssl                        on;
   ssl_certificate        /path/to/my/cert;
   ssl_certificate_key  /path/to/my/key;

   ssl_session_timeout 30m;

   location / {
     root /path/to/my/rails/app/public;
     index index.html;
       passenger_enabled on;
   }
 }
}

我可以添加什麼以便將去的人http://signup.example.com重定向到https://signup.example.com?(僅供參考,我知道有 Rails 外掛可以強制SSL但希望避免這種情況)

根據nginx pitfalls,最好省略不必要的擷取,$request_uri而是使用。在這種情況下,請附加一個問號以防止 nginx 將任何查詢參數加倍。

server {
   listen      80;
   server_name signup.mysite.com;
   rewrite     ^   https://$server_name$request_uri? permanent;
}

官方操作方法中描述的最佳方法是使用return指令:

server {
   listen      80;
   server_name signup.mysite.com;
   return 301 https://$server_name$request_uri;
}

引用自:https://serverfault.com/questions/250476