nginx代理https站點(親測)php
首先,我相信你們已經搞定了nginx正常代理http站點的方法,下面重點介紹代理https站點的配置方法,以及注意事項,由於目前大部分站點有轉換https的須要因此學習這個方法也是很重要的,我就不囉嗦了 直奔主題了………………mysql
測試環境 nginx
nginx版本 nginx/1.6.3web
php版本 5.5.38sql
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代理上配置以下spa
通用配置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)