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;
}
}
Nginx負載均衡
- 代理一臺機器稱爲代理 ,代理兩臺機器就能夠稱爲負載均衡
- 代理服務器後面能夠有多個web服務器,多個web服務器去提供服務的時候,就能夠實現一個負載均衡的功能
- 正常狀況下,用戶訪問web服務器,是一臺一臺去請求;要麼就是指定一個IP,把這域名解析到多臺服務器上
- 案例
- 用戶1 –> web1服務器
- 用戶2 –> web2服務器
- 假設這時web1服務器掛掉了(宕機),用戶1由於解析到了web1,但web1宕機了,因此就沒法正常訪問
- 這時候如果用nginx的負載均衡,在web1宕機後,代理服務器就不會把請求發送給web1,這就是代理的一個優勢,負載均衡的優勢
- 配置負載均衡,負載均衡的配置藉助了upstream 模塊
- 這裏將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 ~]#
- 會看到返回出兩個IP,這個就是域名解析,也就是qq.com解析到了兩個IP上
- 這時候就能夠用這兩個125.39.240.113IP和61.135.157.156IP,去 作負載均衡
- 寫一個配置文件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;
}
}
保存退出
- upstream來指定多個web server
- 當有多個服務器同時對一個域名提供服務的時候,長時間訪問一個域名,在必定的時效內,會出現須要從新登陸或者是說跳轉到另一個地址的服務器上;ip_hash,就是使經過這個代理訪問的同一個域名的多個IP的服務器是,始終保持在一個IP上對這個域名進行訪問
- 在未加載配置的時候,本機去訪問qq.com,回去訪問默認虛擬主機
[root@hanfeng ~]# curl -x127.0.0.1:80 www.qq.com
This is the default site.
[root@hanfeng ~]#
- 測試訪問qq.com
- 檢查配置文件語法,並從新加載
[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 ~]#
- 這時再來訪問qq.com,會看到的是qq.com的主頁,反饋回來的是網頁的源碼
[root@hanfeng ~]# curl -x127.0.0.1:80 www.qq.com
- 這個就是負載均衡
nginx代理和負載均衡的知識點
- nginx不支持去代理https,也就是在配置文件中的server 後不能寫443,是不支持的,只能代理http、tcp
- 若想要實現代理https,nginx監聽443端口,但web服務必須是80端口