12.17 Nginx負載均衡

Nginx負載均衡目錄概要

  • vim /usr/local/nginx/conf/vhost/load.conf // 寫入以下內容
upstream qq_com
{
    ip_hash;
    server 61.135.157.156:80;
    server 125.39.240.113:80;
}
server
{
    listen 80;
    server_name www.qq.com;
    location /
    {
        proxy_pass      http://qq_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;
    }
}
  • upstream來指定多個web server

Nginx負載均衡

  • 代理一臺機器稱爲代理 ,代理兩臺機器就能夠稱爲負載均衡
  • 代理服務器後面能夠有多個web服務器,多個web服務器去提供服務的時候,就能夠實現一個負載均衡的功能
  • 正常狀況下,用戶訪問web服務器,是一臺一臺去請求;要麼就是指定一個IP,把這域名解析到多臺服務器上
  • 案例
    • 用戶1 –> web1服務器
    • 用戶2 –> web2服務器
      • 假設這時web1服務器掛掉了(宕機),用戶1由於解析到了web1,但web1宕機了,因此就沒法正常訪問
      • 這時候如果用nginx的負載均衡,在web1宕機後,代理服務器就不會把請求發送給web1,這就是代理的一個優勢,負載均衡的優勢
  1. 配置負載均衡,負載均衡的配置藉助了upstream 模塊
  2. 這裏將qq.com做爲演示對象
  • dig命令查看解析的IP——>yum install -y bind-utils
[root@hanfeng ~]# yum install -y bind-utils


[root@hanfeng ~]# dig qq.com

; <<>> DiG 9.9.4-RedHat-9.9.4-51.el7_4.1 <<>> qq.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 24485
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;qq.com.				IN	A

;; ANSWER SECTION:
qq.com.			273	IN	A	125.39.240.113
qq.com.			273	IN	A	61.135.157.156

;; Query time: 18 msec
;; SERVER: 119.29.29.29#53(119.29.29.29)
;; WHEN: 一 1月 08 22:46:59 CST 2018
;; MSG SIZE  rcvd: 67

[root@hanfeng ~]#
  1. 會看到返回出兩個IP,這個就是域名解析,也就是qq.com解析到了兩個IP上
  2. 這時候就能夠用這兩個125.39.240.113IP和61.135.157.156IP,去 作負載均衡
  3. 寫一個配置文件vim /usr/local/nginx/conf/vhost/load.conf
[root@hanfeng ~]# vim /usr/local/nginx/conf/vhost/load.conf

寫入如下內容
upstream qq_com        //upstream後的名稱自定義
{
    ip_hash;        //目的是爲了讓同一個用戶始終保持在同一個機器上
    server 61.135.157.156:80;    //若是域名解析端口是80,這段配置上的指定端口80是能夠省略的
    server 125.39.240.113:80;
}
server
{
    listen 80;    //定義監聽端口
    server_name www.qq.com;     //域名

    location /
    {
        proxy_pass      http://qq_com;         //這裏填寫的是upstream 的名字
即「http://upstream」,由於做爲一個模塊,代理訪問的是經過解析後的IP訪問;
        proxy_set_header Host   $host;
        proxy_set_header X-Real-IP      $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}
保存退出
  1. upstream來指定多個web server
  • 當有多個服務器同時對一個域名提供服務的時候,長時間訪問一個域名,在必定的時效內,會出現須要從新登陸或者是說跳轉到另一個地址的服務器上;ip_hash,就是使經過這個代理訪問的同一個域名的多個IP的服務器是,始終保持在一個IP上對這個域名進行訪問
  1. 在未加載配置的時候,本機去訪問qq.com,回去訪問默認虛擬主機
[root@hanfeng ~]# curl -x127.0.0.1:80 www.qq.com
This is the default site.
[root@hanfeng ~]#
  1. 測試訪問qq.com
  2. 檢查配置文件語法,並從新加載
[root@hanfeng ~]# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@hanfeng ~]# /usr/local/nginx/sbin/nginx -s reload
[root@hanfeng ~]#
  1. 這時再來訪問qq.com,會看到的是qq.com的主頁,反饋回來的是網頁的源碼
[root@hanfeng ~]# curl -x127.0.0.1:80 www.qq.com
  1. 這個就是負載均衡

nginx代理和負載均衡的知識點

  • nginx不支持去代理https,也就是在配置文件中的server 後不能寫443,是不支持的,只能代理http、tcp
  • 若想要實現代理https,nginx監聽443端口,但web服務必須是80端口
相關文章
相關標籤/搜索