遇到一個場景:
開始測試時,使用的是 88 端口,比如 www.abc.com:88
后來上線了切換到 80 端口,www.abc.com,
然后升級到 https 默認使用443端口,https://www.abc.com
但是呢,有部分老用戶還是在使用 88 和 80 端口,這個好解決,就是一個 http 到 https 的 rewrite。
但是呢,有部分用戶會這樣訪問:
https://www.abc.com:88/
協議使用的是 https 協議,但是呢 端口使用的是 88!
這樣就會報錯,導致無法訪問。
解決起來也很簡單,把 80 88 443 三個端口都寫到一個 server 段里面,配置 ssl on,這樣 如果用戶在使用 http 訪問時,就會報497錯誤,
然后用error_page 處理一下:
error_page 497 https://$host$uri;
這樣就是可以實現 http https 協議和 80 88 443 端口的任何組合都會正確的跳轉到 https訪問:


搞定。
error code 497
497 - normal request was sent to HTTPS
當虛擬站點只允許https訪問時,當用http訪問時nginx會報出497錯誤碼
PS: 其實沒有實現 同一個端口同時支持 http 和 https,只是將 http 跳轉到 https。
同一個端口不可能實現兩種訪問協議。
