Nginx配置HTTPS和HTTP
阿新 • • 發佈:2018-12-25
Nginx配置HTTPS
HTTPS(全稱:Hyper Text Transfer Protocol over Secure Socket Layer)安全超文字傳輸協議,是以安全為目標的HTTP通道,簡單講是HTTP的安全版。即將HTTP用SSL/TLS協議進行封裝,HTTPS的安全基礎是SSL/TLS。
HTTP和HTTPS比較
1、HTTP明文協議的缺陷容易導致資料洩露、資料篡改、流量劫持、釣魚攻擊等安全問題。
2、網頁篡改及劫持篡改網頁推送廣告。
3、HTTP協議無法驗證通訊方身份,可以偽造虛假伺服器欺騙使用者。
4、WIFI熱點的普及和行動網路的加入,放大了資料被劫持、篡改的風險。
5、HTTPS普遍認為效能消耗要大於HTTP。但是我們可以通過效能優化、把證書部署在SLB或CDN,來解決此問題。
Nginx上部署HTTPS
1、首先我們需要購買證書(或者自己生成證書,但是自己生成的證書是不被其他瀏覽器和平臺所信任的,生成證書參考)
2、如果伺服器使用Nginx做均載或者域名代理,需要在nginx配置ssl。
一、Nginx配置ssl所有請求都走HTTPS配置
server {
listen 443; #指定ssl監聽埠
server_name *.andy.com;
ssl on; #開啟ssl支援
ssl_certificate /etc/nginx/server.pem; #指定伺服器證書路徑
ssl_certificate_key /etc/nginx/server.key; #指定私鑰證書路徑
ssl_session_cache shared:SSL:10m; #SSL會話快取10MB
ssl_session_timeout 10m; #SSL會話超時間10分鐘
ssl_protocols SSLv2 SSLv3 TLSv1 TLSv1.1 TLSv1.2; #指定SSL伺服器端支援的協議版本
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP ; #指定加密演算法
ssl_prefer_server_ciphers on; #在使用SSLv3和TLS協議時指定伺服器的加密演算法要優先於客戶端的加密演算法
#以下內容請按域名需要進行配置,此處僅供參考
location /test {
proxy_pass http://192.168.1.111:8080/test;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header Remote_Addr $remote_addr;
proxy_set_header X-REAL-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Nginx配置HTTP和HTTPS共存
在大多數情況下,我們有可能為了相容之前APP或者專案釋出的版本(之前都走HTTP請求),需要配置HTTP和HTTPS並存的情況,這時我們需要配置Nginx監聽80埠和關閉SSL的強制開啟。
nginx參考文件:SSL文件
server {
listen 80; #監聽80http請求
listen 443; #指定ssl監聽埠
server_name *.andy.com;
ssl_certificate /etc/nginx/server.pem; #指定伺服器證書路徑
ssl_certificate_key /etc/nginx/server.key; #指定私鑰證書路徑
ssl_session_cache shared:SSL:10m; #SSL會話快取10MB
ssl_session_timeout 10m; #SSL會話超時間10分鐘
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #指定SSL伺服器端支援的協議版本
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP; #指定加密演算法
ssl_prefer_server_ciphers on; #在使用SSLv3和TLS協議時指定伺服器的加密演算法要優先於客戶端的加密演算法
#以下內容請按域名需要進行配置,此處僅供參考
location /test {
proxy_pass http://192.168.1.111:8080/test;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header Remote_Addr $remote_addr;
proxy_set_header X-REAL-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
HTTPS的加速配置
如果我們專案中在Nginx上層配置了CDN或SLB等,那麼SSL需要加到CDN上,CDN不僅提供圖片、請求、靜態檔案等資源的快取,而且還提供HTTPS安全加速,讓HTTPS在請求效能方面和HTTP一樣,自然安全性上更高。下面以阿里雲CDN配置HTTPS為例。
首先開啟HTTPS
配置HTTPS內容
一般選擇跳轉方式為HTTP和HTTPS共存。