1. 程式人生 > 其它 >沒加證書的域名通過https訪問,錯誤的訪問到有證書的域名專案--已解決

沒加證書的域名通過https訪問,錯誤的訪問到有證書的域名專案--已解決

今天有同事遇到這樣一個問題,問題的經過是這樣的:

同一臺伺服器裡,nginx 部署了多個專案,有的加了ssl證書,有的沒有加。

其中有一個沒加證書的專案,在測試時,以https協議頭訪問,瀏覽器提示沒有證書不安全,點選繼續訪問後,既然出現了另一個有證書的專案的頁面。

比如: 專案Aaa.com 和專案B bb.com, bb.com 有證書,aa.com 沒有證書。正常來說,https://aa.com 是無法訪問的,但是在訪問 https://aa.com 的時候,響應的頁面竟然是 https://bb.com (雖然瀏覽器仍然會提示 證書不安全)

這個時候,就開始一一排查,應該是 aa.com 專案沒有監聽443埠,然後這個請求就被其它監聽443埠的專案給接管了,並且還是有順序的接管

比如:在 nginx/vhost/目錄下有 多個配置檔案,分別是 aa.com.conf 和 bb.com.conf 和 ab.com.conf

aa.com.conf 沒有證書,而其它兩個有證書,但是接管順序也是按照 配置檔案的載入順序來進行,按照正常的檔名排序,就是 ab.com.conf 優先於 bb.com.conf

(以上只是個人理解,有明白的朋友希望可以在評論中補充並指錯)

最後的解決辦法就是,寫一個預設的配置檔案,去接管一些沒有部署證書的專案,程式碼如下 :

server
{
    listen 80; # 監聽80埠
    listen 443 ssl http2; # 同時也監聽443埠
server_name _; # 預設監聽所有沒有被接管的專案 index index.html; root /www/nginx/html; # 給一個預設頁面 # 當監聽443埠時,以下兩行的證書路徑必須寫上 ssl_certificate /www/data/cert/fullchain.pem; ssl_certificate_key /www/data/cert/privkey.pem; location ~ / { # 判斷所有訪問443埠的專案,讓它再重新跳轉至 80埠 if ($server_port
~ 443) { return 301 http://$host$request_uri; } } }