nginx代理https站點(親測) 首先,我相信大家已經搞定了nginx正常代理http站點的方法,下麵重點介紹代理https站點的配置方法,以及註意事項,因為目前大部分站點有轉換https的需要所以學習這個方法也是很重要的,我就不啰嗦了 直奔主題了……………… 測試環境 nginx版本 ngin ...
nginx代理https站點(親測)
首先,我相信大家已經搞定了nginx正常代理http站點的方法,下麵重點介紹代理https站點的配置方法,以及註意事項,因為目前大部分站點有轉換https的需要所以學習這個方法也是很重要的,我就不啰嗦了 直奔主題了………………
測試環境
nginx版本 nginx/1.6.3
php版本 5.5.38
mysql版本 5.5.32
前提,後端web節點已經可以同時監聽80,443埠(站點可以正常通過web節點訪問http和https),具體配置https的方法網上一大堆,大家可以百度一下 生成一個ssl的免費證書 搭建https的web站點, 解析web本機ip的話可以分別實現http和https的訪問,(註意:web節點沒有設置rewrite規則實現http到https的自動跳轉)(如果不需要nginx做web代理 的情況下 web節點需要在location欄位下配置rewrite 規則才能實現http到https的自動跳轉)
附上後端web nginx配置文件 (phpadmin.ff.com)
我們要做的重點來了
Nginx代理已經分別開啟80 和443的同時監聽 配置成類似後端web節點的配置,這裡我們以phpadmin.ff.com 這個功能變數名稱進行測試 nginx代理上配置如下
通用配置nginx.conf
為了方便 我的upstream裡面只放了一個web節點 另外一個做備份使用,註意我的upstream 並沒有在後端加上:443這樣的信息
(include)Phpadmin.conf配置(註意紅色箭頭的部分,如果不加入這條規則 用戶必須手動輸入https://phpadmin.ff.com才能訪問https 而不能實現http到https的自動跳轉)
這裡標註的地方就是為了實現 http訪問到https的自動切換 ,如果不加這條rewrite 需要自己手動輸入https://phpadmin.ff.com 訪問,
總結:
1.nginx在做http代理時 定義的upstream預設埠號為80 (所以準確來說upstream並不是預設埠就是80,80只是nginx代理的一部分)
2.nginx在做https代理的時候,預設 upstream 是https的協議訪問443埠。
3.總之如果web對外提供https http 服務 那麼在web上配置https 和http 做一下rewrite
4.如果nginx代理對外提供https http服務 那麼在nginx代理上配置https 和http 做一下rewrite ,兩個不能同時做rewrite 不然訪問日誌會爆炸,重定向一個死迴圈
目前還有的問題就是,做phpadmin的https 沒有內容上的不完整顯示,做discuz和WordPress的時候無法顯示圖片和一些網頁設計內容(只顯示了文本),這個有可能和https協議加密的內容有關。目前只有Google大神把所有內容都做了https處理。一般在登錄和做交易的時候會自動跳轉到https(可以使用nginx的基於擴展名的rewrite)