1. 程式人生 > >Nginx配置HTTPS和HTTP

Nginx配置HTTPS和HTTP

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
CDN開啟https

配置HTTPS內容
https配置

一般選擇跳轉方式為HTTP和HTTPS共存。