本篇文章更新時間:2025/10/27
如有資訊過時或語誤之處,歡迎使用 Contact 功能通知。
一介資男的 LINE 社群開站囉!歡迎入群聊聊~
如果本站內容對你有幫助,歡迎使用 BFX Pay 加密貨幣 或 新台幣 贊助支持。
當你使用 Nginx 伺服器,啟用 HTTPS 協議但沒有設定「預設的伺服器區塊 (default server)」時,在遇到 https://IP_ADDRESS 或未知的 Host 時,會隨機(實際上是第一個)挑一個 HTTPS 虛擬主機回應。這樣做會造成:
- 別人輸入你的 IP 就會看到某個網站;
- SSL 憑證不匹配(可能出現警告);
- 有時會洩漏不該曝光的網站內容。
這問題滿妙的。不解決雖然不會怎樣,但其實能透過 HTTPS://IP 這樣方式就可以知道這台主機上有什麼網站,怎樣都不太踏實。
解決辦法如下:
先自簽一個預設 SSL 憑證
sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /usr/local/nginx/conf/ssl/default.key -out /usr/local/nginx/conf/ssl/default.crt -subj "/CN=default.invalid"
建立 server 組態
檔案: /usr/local/nginx/conf/default.conf
server {
#listen 80 default_server;
#listen [::]:80 default_server;
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
ssl_certificate /usr/local/nginx/conf/ssl/default.crt;
ssl_certificate_key /usr/local/nginx/conf/ssl/default.key;
ssl_reject_handshake on; #v1.19.4 後可以單純用這個阻擋,不需要假憑證
return 444;
}
修改預設組態
檔案: /usr/local/nginx/conf/nginx.conf
在 vhost 前補上 include default.conf; 引用這組設定後,重新整理組態設定: lnmp reload 。
後記
基本上現在我都編譯的版本都是 Nginx 1.2x 以上版本了,不用自簽那段也可以直接把預設組態掛上也能發揮效果。
只是這段不會是預設組態會出現的,要自己加入設定才可以。筆記一下~
組態這邊 return 444 就是看要用在 HTTPS 下,還是連 HTTP 也要,可以自由搭配。
