遇到一個場景:php
開始測試時,使用的是 88 端口,好比 www.abc.com:88nginx
後來上線了切換到 80 端口,www.abc.com,測試
而後升級到 https 默認使用443端口,https://www.abc.comspa
可是呢,有部分老用戶仍是在使用 88 和 80 端口,這個好解決,就是一個 http 到 https 的 rewrite。code
可是呢,有部分用戶會這樣訪問:orm
https://www.abc.com:88/server
協議使用的是 https 協議,可是呢 端口使用的是 88!blog
這樣就會報錯,致使沒法訪問。ssl
解決起來也很簡單,把 80 88 443 三個端口都寫到一個 server 段裏面,配置 ssl on,這樣 若是用戶在使用 http 訪問時,就會報497錯誤,it
而後用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。
同一個端口不可能實現兩種訪問協議。