目錄

如何設定 Nginx 強制走 Https

1 為什麼要改這個?

現在的瀏覽器,如果自己連過 https 的某個網域,下次再手動輸入網址到瀏覽器上,看起來它會自己幫你改成 https。結果就出現一個我自己都看不到的問題是,如果有別人想連我的網站,卻沒有輸入https:// 開頭,看起來因為我沒有開 port 80 去 服務 http,竟然會造成無法連線的窘境。 趕忙上網找看看有沒有文章有寫到可以自動轉https的做法,好在解決方法不難 …

2 修改 Nginx 的設定

我比較懶, 想說反正應該也沒有需要走 http,直接把整個站的設定轉到 https 就好。

1
2
3
4
5
6
server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name _;
    return 301 https://$host$request_uri;
}

這樣的作法很簡單,直接把所有從80進來的透過 301 都轉去 https 開頭的網址。 可以試試看用 wget 嘗試抓 http 的首頁就會看到被 301 轉走了。

另外要注意的是,若是原本 iptables 沒有開啟 80 port,要記得去打開

以 Oracle cloud 使用 Ubuntu 18.04 LTS 為例(ens3是 Oracle cloud 的設定,其他主機不一定叫做這個名字);

1
2
3
4
5
6
7
8
sudo iptables -I INPUT 5 \
  -i ens3 \
  -p tcp --dport 80 \
  -m state \
  --state NEW,ESTABLISHED \
  -j ACCEPT
#sudo su 不知為何用 sudo 沒辦法跑下面這行指令, 可切到 root 再執行
sudo iptables-save > /etc/iptables/rules.v4

3 參照

linuxize - Redirect HTTP to HTTPS in Nginx

Wiki - HTTP 301