ngnix 負載均衡 ip_hash https

1 nginx 負載均衡

當被代理的服務端為多臺服務器時,就存在一個分發的問題,那麽就涉及到一個負載均衡的概念。如何讓客戶端請求按照預定的設想均衡的分發到各個服務器上,就要使用各種均衡算法。下面介紹的ip哈希算法可以實現如下目的。
當對後端的多臺動態應用服務器做負載均衡時,ip_hash指令能夠將某個客戶端IP的請求通過哈希算法定位到同一臺後端服務器上。這樣,當來自某個IP的用戶在後端Web服務器A上登錄後,再訪問該站點的其他URL,能夠保證其訪問的還是後端Web服務器A。如果請求的網站涉及到用戶名密碼等登陸信息,不至於下次訪問時請求到其他服務器上而丟失。
我們還以百度為例,就是在之前的反響代理基礎上加上ip_hash 算法
我們執行 dig www.baidu.com 挖出兩個代理ip
61.135.169.125
61.135.169.121

upstream baidu_com
{
    ip_hash;
    server 61.135.169.125:80;
    server 61.135.169.121:80;
}
server
{
    listen 80;
    server_name www.baidu.com;
    location /
    {
        proxy_pass      http://baidu_com;
        proxy_set_header Host   $host;
        proxy_set_header X-Real-IP      $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

curl -x127.0.0.1:80 www.baidu.com
我們發現可以訪問,也就是說這個代理服務器起作用了,但是怎麽驗證他的負載均衡了,就是怎麽查看最終訪問到哪一個ip呢,有知道的小夥伴可以給我留言。

2 https加密原理

htttps 相對於http來說多了一套數字認證過程,客戶端和服務器之前的通信是加密過的,因此具有很高的安全性。下面我們根據下圖所示原理,逐一說明該加密傳輸過程。
技術分享圖片
1 客戶端發起一個htts請求
2 服務端通過受信任的頒發機構獲得ssl證書。
3 服務端用該證書的公鑰相應請求給客戶端。
4 客戶端驗證該收到的公鑰的合法性和有效性,無效發出警告提醒。有效則生成隨機字符串,並用該公鑰加密。
5 客戶端發送加密過的字符串給服務端。
6 服務端收到來自客戶端加密過的隨機字符串,用ssl證書私鑰解密該字符串
7 服務端用解密出來的字符串加密請求頁數據返回給客戶端
8 客戶端用隨機字符串解密數據。
備註:該過程當中,客戶端生成的隨機字符串是一次性的

3 生成ssl秘鑰對

cd /usr/local/nginx/conf
openssl genrsa -des3 -out tmp.key 2048//key文件為私鑰,根據提示輸入兩次密碼
openssl rsa -in tmp.key -out lvlinux.key //轉換key,取消密碼 。根據提示輸入上面的密碼
rm -f tmp.key
openssl req -new -key lvlinux.key -out lvlinux.csr//生成證書請求文件,需要拿這個文件和私鑰一起生成公鑰。根據提示填寫相關信息。
openssl x509 -req -days 365 -in lvlinux.csr -signkey lvlinux.key -out lvlinux.crt
 這裏的lvlinux.crt為公鑰

4 nginux 配置ssl

vim /usr/local/nginx/conf/vhost/ssl.conf//加入如下內容

server
{
    listen 443;
    server_name lvlinux.com;
    index index.html index.php;
    root /data/wwwroot/lvlinux.com;
    ssl on;
    ssl_certificate lvlinux.crt;
    ssl_certificate_key lvlinux.key;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
}

-t && -s reload //若報錯unknown directive “ssl” ,需要重新編譯nginx,加上--with-http_ssl_module
mkdir /data/wwwroot/lvlinux.com
echo "ssl test" >/data/wwwroot/lvlinux.com/index.html
編輯hosts,增加127.0.0.1 lvlinux.com
curl https://lvlinux.com/
技術分享圖片
發現證書頒發機構被標記為不受用戶信任,我們自己頒發的證書當然是這樣了.
在windos上綁定hosts 用瀏覽器訪問
技術分享圖片
註意我們要 netstat -lntp 查看有沒有監聽443 端口,沒有的話重啟下nginx

Linux學習總結(四十三)nginx 負載均衡 https 配置