實戰篇:Nginx反向代理與負載均衡

之前在有道雲筆記中的記錄會逐個發佈分享,以及我的學習過程當中的理解,歡迎交流html

文章內容包括如下三點:

1. 反向代理

2. 負載均衡

3. 靜態資源緩存

原理圖1:負載均衡nginx

clipboard.png

原理圖2:反向代理web

clipboard2.png

正向代理代理的對象是客戶端,反向代理代理的對象是服務端算法

Linux下搭建Nginx環境

1.所需安裝包

clipboard3.png

Nginx的環境依賴後端

clipboard4.png

Nginx安裝包瀏覽器

2.編譯安裝環境依賴

2.1切換root權限緩存

zjp@zjp-virtual-machine:~$ sudo su
[sudo] password for zjp: 
root@zjp-virtual-machine:/home/zjp#
複製代碼

2.2進入安裝包所在文件夾tomcat

-> tar zxvf openssl-1.0.0e.tar.gz           解壓壓縮包
-> cd openssl-1.0.0e                             進入文件夾
->./config && make && make install      開始安裝    或->./configure && make && make install
複製代碼

3.安裝Nginx

-> tar zxvf nginx-1.12.1.tar.gz           解壓壓縮包
-> cd nginx-1.12.1                             進入文件夾
->./config && make && make install      開始安裝
複製代碼

4.啓動Nginx

安裝完後服務器

clipboard5.png

啓動命令:./nginxmarkdown

重啓命令:./nginx -s reload

啓動後,打開終端:ps -aux | grep nginx,查看nginx進程

clipboard6.png

nginx主線程佔用80端口。打開瀏覽器:http://localhost:80,顯示以下,搭建成功

clipboard7.png

5.修改nginx.conf

root權限進入/usr/local/nginx/conf/ 命令:gedit nginx.conf 用文本編輯器(或者 vi)打開文件

upstream 集羣名{
	server 192.168.0.155:8080;
	server 192.168.0.155:9090;
}
複製代碼

在server中添加:

server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
	    proxy_pass http://集羣名;
            #root   html;
            #index  index.html index.htm;
        }
...
}
複製代碼

修改後保存,重啓Nginx

瀏覽器訪問 http://localhost:80/+集羣中項目名

進入tomcat_8080服務器

clipboard8.png

或者進入tomcat_9090服務器

clipboard9.png

負載均衡

隨着業務不斷拓展、用戶量不斷增多,本來一臺Nginx代理的服務器已經顯得吃力,不論在性能、響應速度等都顯得力不從心,因此須要對後臺服務器作負載均衡,緩解一臺或幾臺服務器的高併發請求壓力。

一、Upstream

負載均衡須要使用Nginx支持的HTTP Upstream模塊,該模塊經過一個簡單的算法調度來實現客戶端ip到服務端負載均衡。Upstream目前支持4種調度算法:

  • A、默認的輪循:默認的調度算法,在處理客戶端的每次請求時,按照時間順序逐一分配到均衡服務器,能夠設定服務器的權重(weight)比值,比值越大訪問的概率越大,通常用在後臺服務器列表訪問性能不均勻狀況。
  • B、ip_hash:記錄每次訪客的ip地址,固定分配給指定的服務器,有效的解決了不一樣服務器網頁Session的問題。
  • C、fair:根據後端服務器響應的時間長短來分配,響應時間越短被分配概率越大,它屬於第三方插件,Nginx自己並不支持,如需使用必須下載Nginx的upstream_fair模塊。
  • D、url_hash:按訪問的地址url的hash值結果分配, 使每一個url定向到指定的服務器,能夠提升後端服務器的緩存效率,一樣的,Nginx自己也不支持該算法,須要第三方的hash軟件。

二、Upstream支持的狀態參數

在Nginx的Upstream模塊中,除了能夠經過server指定到特定服務器和端口,還能夠設置服務器在負載均衡中的狀態。目前的狀態以下:

  • A、down:表明當前的服務器server不參與負載均衡。
  • B、backup:預留的備用設備,也就是當其它的服務器故障或忙時纔會分配它給客戶請求,因此它的壓力最小。
  • C、max_fails:服務器server容許請求失敗的次數,默認爲1次,當失敗次數超過限定的次數,就會返回proxy_next_upstream錯誤信息。
  • D、fail_timeout:當經歷了max_fails的次數後,暫停服務的時間,通常與max_fails配合使用。

注意:當服務器的調度算法爲ip_hash時,服務器在負載均衡中的狀態不能是weight和backup

例子1:

upstream backend {

  server A max_fails=3 fail_timeout=4s weight=9;

  server B max_fails=3 fail_timeout=4s weight=9;

  server C max_fails=3 fail_timeout=4s weight=9;

  server D backup;

  Server E backup;

}
複製代碼

例子2:

upstream backend {

ip_hash;

  server A max_fails=3 fail_timeout=4s;

  server B max_fails=3 fail_timeout=4s;

  server C max_fails=3 fail_timeout=4s;

}
複製代碼

proxy_connect_timeout:與服務器鏈接的超時時間,默認60s

fail_timeout:當該時間內服務器沒響應,則認爲服務器失效,默認10s

max_fails:容許鏈接失敗次數,默認爲1

某一臺服務器宕機後,等待時間 = proxy_connect_timeout + fail_timeout*max_fails

靜態資源緩存

1.緩存指令: proxy_cache_path

格式:proxy_cache_path + path + levels + keys_zone + inactive + max_size

  • path -緩存文件存放的位置
  • levels -緩存目錄結構,能夠是一、二、3位數字做爲目錄,最可能是3位數字如:1,1:2
  • keys_zone -指定緩存池名字及大小,每一個定義緩存路徑必須不一樣
  • inactive -設置每一個緩存區緩存文件的有效時長,超過該時長沒被訪問的緩存被刪除
  • max_size -設置不活動的緩存大小,不活動的緩存超過該大小後被刪除

例:proxy_cache_path /usr/local/nginx/cache levels=1:2 keys_zone=webpages:30m max_size=2g;

proxy_cache

格式:proxy_cache + cache_name

指定緩存區域的名字,一個相同的區域能夠在不一樣的地方使用。

proxy_cache_valid

格式:proxy_cache_valid + reply_code + time;

例:proxy_cache_valid 200 10m;

nginx.conf配置示例:

events {
    worker_connections  1024;
}

http {
	upstream tomcatServers {
		server 192.168.0.155:8080 weight=1 max_fails=2 fail_timeout=2;
		server 192.168.0.155:9090 weight=1 max_fails=2 fail_timeout=2;
		server 192.168.0.155:9091 backup;
	} 

    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  65;
	
	proxy_cache_path /usr/local/nginx/cache levels=1:2 keys_zone=webpages:30m max_size=2g;

    server {
        listen       80;
        server_name  localhost;
		add_header X-Via $server_addr;
        add_header X-Cache $upstream_cache_status;

        location / {
			proxy_pass http://tomcatServers;
			proxy_set_header X-Real-IP $remote_addr;
			proxy_cache webpages;
            proxy_cache_valid 200 10m;
            #root   html;
            #index  index.html index.htm;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

    }
複製代碼

新建緩存頁面路徑:

$ mkdir –pv /nginx/cache/webpages

$server_addr - 顯示的服務器地址

$upstream_cache_status - 緩存的狀態 可能的值爲:MISS(未命中)、Hint(命中)、Expired(請求傳遞到後臺)、Stale(後端獲得過時的應答)、Updating(正更新,使用舊的應答)等。 那麼,在這裏若是緩存的狀態爲HINT,就說明命中了緩存,也就是調用了緩存文件。

clipboard10.png

進入緩存路徑查看(使用root權限查看):

clipboard11.png

cat 命令查看文件

clipboard12.png

相關文章
相關標籤/搜索