nginx 同一個端口同時 支持 http 和 https

遇到一個場景: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。

同一個端口不可能實現兩種訪問協議。 

相關文章
相關標籤/搜索