Nginx的最佳實踐

一. Nginx的簡介

1. 什麼是nginx

  • Nginx是俄羅斯人編寫的十分輕量級的HTTP服務器,Nginx,它的發音爲“engine X”, 是一個高性能的HTTP和反向代理服務器,同時也是一個IMAP/POP3/SMTP 代理服務器。Nginx是由俄羅斯人 Igor Sysoev爲俄羅斯訪問量第二的 Rambler.ru站點開發的,它已經在該站點運行超過兩年半了。Igor Sysoev在建立的項目時,使用基於BSD許可。自Nginx 發佈來,Nginx 已經因爲它的穩定性、豐富的功能集、示例配置文件和低系統資源的消耗而聞名。

2. Ninx的優點

  • 1. 高併發連接:

    官方測試能夠支撐5萬併發連接,在實際生產環境中跑到2~3萬併發連接數。

  • 2. 內存消耗少:

在3萬併發連接下,開啓的10個Nginx 進程才消耗150M內存(15M*10=150M)。

  • 3. 配置文件非常簡單:

風格跟程序一樣通俗易懂。

  • 4. 成本低廉:

Nginx爲開源軟件,可以免費使用。而購買F5 BIG-IP、NetScaler等硬件負載均衡交換機則需要十多萬至幾十萬人民幣。

  • 5. 支持Rewrite重寫規則

能夠根據域名、URL的不同,將 HTTP 請求分到不同的後端服務器羣組。

  • 6. 內置的健康檢查功能:

如果 Nginx Proxy 後端的某臺 Web 服務器宕機了,不會影響前端訪問。

  • 7. 節省帶寬:

支持 GZIP 壓縮,可以添加瀏覽器本地緩存的 Header 頭。

  • 8. 穩定性高:

用於反向代理,宕機的概率微乎其微。

​ Nginx專爲性能優化而開發,性能是其最重要的考量,實現上非常注重效率 。它支持內 核Poll模型,能經受高負載的考驗,有報告表明能支持高達 50,000個併發連接數。 Nginx具有很高的穩定性,其它HTTP服務器當遇到訪問的峯值,或者有人惡意發起慢速連接時,也很可能會導致服務器物理內存耗盡頻繁交換,失去響應只能重啓服務器。例如當前Apache一旦上到200個以上進程,web響應速度就明顯非常緩慢了。而Nginx採取了分階段資源分配技術,使得它的CPU與內存佔用率非常低。Nginx官方表示保持 10,000個沒有活動的連接,它只佔2.5M內存,所以類似DOS這樣的攻擊對Nginx來說基本上是毫無用處的。就穩定性而言,nginx比lighttpd更勝一籌。 Nginx支持熱部署,它的啓動特別容易, 並且幾乎可以做到7*24不間斷運行,即使運 行數個月也不需要重新啓動。你還能夠在不間斷服務的情況下,對軟件版本進行進行升級。 Nginx採用master-slave模型,能夠充分利用SMP的優勢,且能夠減少工作進程在磁 盤I/O的阻塞延遲。 Nginx代碼質量非常高,代碼很規範,手法成熟, 模塊擴展也很容易。 Nginx採用了一些os提供的最新特性如對sendfile (Linux2.2+),accept-filter(FreeBSD4.1+),TCP_DEFER_ACCEPT (Linux 2.4+)的支持,從而大大提高了性 能。


二. Nginx的配置文件

1. Nginx的配置文件詳解

1.1 認識配置文件

Linux 下基本上每個服務都會有它的主配置文件,該文件會定義服務應該如果去運行,

使用些什麼參數,啓用些什麼功能,相關會涉及到的一些操作文件在哪,所以主配置文件對 服務是至關重要的。下面我們來分析一下 Nginx 的主配置文件。

Nginx的主配置文件默認情況下位於/usr/local/nginx/nginx.conf 以下爲Nginx

#指定使用的用戶
#user  nobody;

#啓動進程,通常設置成和cpu的數量相等
worker_processes  1;

#全局錯誤日誌
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#PID文件--存放進程號的文件
#pid        logs/nginx.pid;

#工作模式及連接數上限
events {
    #單個後臺worker process進程的最大併發鏈接數
    worker_connections  1024;
    #併發總數是 worker_processes 和 worker_connections 的乘積

    #Nginx支持如下處理連接的方法(I/O複用方法),這些方法可以通過 use指令指定。  
    #use [ kqueue | rtsig | epoll | /dev/poll | select | poll ];  

    #use epoll;  #使用 epoll(linux2.6的    性能方式 )  
    #select - 標準方法。 如果當前平臺沒有更有效的方法,它是編譯時默認的方法。你可以使用配置參數 –with-select_module 和 –without-select_module 來啓用或禁用這個模塊。  
    #poll - 標準方法。 如果當前平臺沒有更有效的方法,它是編譯時默認的方法。你可以使用配置參數–with-poll_module 和 –without-poll_module 來啓用或禁用這個模塊。  
    #kqueue -   效的方法,使用於 FreeBSD 4.1+, OpenBSD 2.9+, NetBSD 2.0 和 MacOS X. 使用雙處理器的 MacOS X系統使用 kqueue可能會造成內核崩潰。  
    #epoll -  效的方法,使用於Linux內核2.6版本及以後的系統。在某些發行版本中,如 SuSE 8.2,有讓2.4版本的內核支持epoll的補丁。  
    #rtsig - 可執行的實時信號,使用於Linux內核版本 2.2.19以後的系統。可是從Linux內核版本2.6.6-mm2開始,這個參數就不再使用了.  
    #/dev/poll -  效的方法,使用於 Solaris 7 11/99+, HP/UX 11.22+ (eventport), IRIX 6.5.15+ 和 Tru64 UNIX 5.1A+.  
    #eventport -  效的方法,使用於 Solaris 10. 爲了防止出現內核崩潰的問題, 有必要安裝 這個 安全補丁。  
}


http {
    #設定mime類型,類型由mime.type文件定義
    include       mime.types;
    default_type  application/octet-stream;
    
     #設定日誌格式	
    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #sendfile 指令指定 nginx 是否調用 sendfile 函數(zero copy 方式)來輸出文件,
    #對於普通應用,必須設爲 on,
    #如果用來進行下載等應用磁盤IO重負載應用,可設置爲 off,
    #以平衡磁盤與網絡I/O處理速度,降低系統的uptime.	
    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;
    
    #連接超時時間
    #keepalive_timeout  0;
    keepalive_timeout  65;

    #開啓gzip壓縮	
    #gzip  on;
    
    #設定虛擬主機配置	
    server {
        #偵聽80端口
        listen       80;

	#定義使用 www.nginx.cn訪問
        server_name  localhost;

	#定義服務器的默認網站根目錄位置
        root html;

	#設置編碼
        #charset koi8-r;
	
	#設定本虛擬主機的訪問日誌
        #access_log  logs/host.access.log  main;

	#默認請求
        location / {
	    root html;	
	    #定義首頁索引文件的名稱
            index  index.html index.htm;
        }

	# 定義錯誤提示頁面
        #error_page  404              /404.html;
        #redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #PHP腳本轉給apache處理
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #PHP 腳本請求全部轉發到 FastCGI處理. 使用FastCGI默認配置.
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        # 禁止訪問 .htxxx 文件
        #location ~ /\.ht {
        #    deny  all;
        #}
    }

    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}


    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}
}

1.2 nginx的配置文件結構

  • nginx.conf由多個塊組成,最外面的塊是main,main包含events和http,http包含多個upstream和多個server,server又包含多個location:

  • main(全局設置)、server(虛擬主機設置)、upstream(負載均衡服務器設置)和 location(URL匹配特定位置的設置)。
  • main塊設置的指令將影響其他所有設置;
  • server塊的指令主要用於指定主機和端口;
  • upstream指令主要用於負載均衡,設置一系列的後端服務器;
  • location塊用於匹配網頁位置。
  • 這四者之間的關係式:server繼承main,location繼承server,upstream既不會繼承其他設置也不會被繼承。
  • 在這四個部分當中,每個部分都包含若干指令,這些指令主要包含Nginx的主模塊指令、事件模塊指令、HTTP核心模塊指令,同時每個部分還可以使用其他HTTP模塊指令,例如Http SSL模塊、HttpGzip Static模塊和Http Addition模塊等。

1.3 Nnginx的全局配置

#指定使用的用戶和組
#user  nginx nginx;

#啓動進程,通常設置成和cpu的數量相等
worker_processes  1;

#全局錯誤日誌
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#PID文件--存放進程號的文件
#pid        logs/nginx.pid;

創建全局配置中nginx需要的運行用戶

groupadd nginx
useradd -g nginx nginx

2. events配置

服務器爲linux時, 請講use epoll打開. 利用linux的內核提供性能優化方案

#工作模式及連接數上限
events {
    #單個後臺worker process進程的最大併發鏈接數
    worker_connections  1024;
    #併發總數是 worker_processes 和 worker_connections 的乘積

    #Nginx支持如下處理連接的方法(I/O複用方法),這些方法可以通過 use指令指定。  
    #use [ kqueue | rtsig | epoll | /dev/poll | select | poll];  

    use epoll;  #使用 epoll(linux2.6的    性能方式 )
}

3. http的配置

http {
    #Nginx對HTTP服務器相關屬性的配置
include       mime.types;
default_type  application/octet-stream;
#設定虛擬主機配置	
    server {
        #偵聽80端口
        listen       80;
	    #定義使用 www.itsource.cn訪問
        server_name  www.itsource.cn;
	    location  {
        }
		location  {
        }
		…..
}
  server {
        #偵聽80端口
        listen       80;
	    #定義使用 www.example.cn訪問
        server_name  www.example.cn;
	    location  {
        }
		location  {
        }
		…..
    }

}

include是個主模塊指令,實現對配置文件所包含的文件的設定,可以減少主配置文件的複雜度。類似於Apache中的include方法。

default_type屬於HTTP核心模塊指令,這裏設定默認類型爲二進制流,也就是當文件類型未定義時使用這種方式,例如在沒有配置PHP環境時,Nginx是不予解析的,此時,用瀏覽器訪問PHP文件就會出現下載窗口。

server塊的指令主要用於指定主機和端口(虛擬主機);

location部分主要用於匹配網頁位置,設置不同的功能特徵. 比如:緩存,重定向等…


4. nginx重要指令之location

location部分主要用於匹配網頁位置,設置不同的功能特徵. 比如:緩存,重定向等…

實例:

  • 有擴展名以.gif、.jpg、.jpeg、.png、.bmp、.swf結尾的靜態文件都交給nginx處理,而expires用來指定靜態文件的過期時間,這裏是30天
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$  {
                root    /wwwroot/www.itsource.com;
               expires 30d;
        }
  • upload和html下的所有文件都交給nginx來處理,當然,upload和html目錄包含在/web/wwwroot/www.itsource.cn目錄中
location ~ ^/(upload|html)/  {
        root    /web/wwwroot/www.itsource.com;
        expires 30d;
        }
  • location是對此虛擬主機下動態網頁的過濾處理,也就是將所有以.php爲後綴的文件都交給本機的8080端口處理
location ~ .*.php$ {
    index index.php;
    proxy_pass http://localhost:8080;
}

location的語法:

  • ~ #波浪線表示執行一個正則匹配,區分大小寫

  • ~ #表示執行一個正則匹配,不區分大小寫*

  • ^~ #^~表示普通字符匹配,如果該選項匹配,只匹配該選項,不匹配別的選項,一般用來匹配目錄

  • = #進行普通字符精確匹配


location中可以接受一下的語法規則

location  = / {
  # 只匹配"/".
  [ configuration A ] 
}
location  / {
  # 匹配任何請求,因爲所有請求都是以"/"開始
  # 但是更長字符匹配或者正則表達式匹配會優先匹配
  [ configuration B ] 
}
location ^~ /images/ {
  # 匹配任何以 /images/ 開始的請求,並停止匹配 其它location
  [ configuration C ] 
}
location ~* \.(gif|jpg|jpeg)$ {
  # 匹配以 gif, jpg, or jpeg結尾的請求. 
  # 但是所有 /images/ 目錄的請求將由 [Configuration C]處理.   
  [ configuration D ] 
}

優先級:

  1. =前綴的指令嚴格匹配這個查詢。如果找到,停止搜索。

  2. 所有剩下的常規字符串,最長的匹配。如果這個匹配使用^〜前綴,搜索停止。

  3. 正則表達式,在配置文件中定義的順序。

  4. 如果第3條規則產生匹配的話,結果被使用。否則,如同從第2條規則被使用。

請求URI例子:

/ -> 符合configuration A

/documents/document.html -> 符合configuration B

/images/1.gif -> 符合configuration C

/documents/1.jpg ->符合 configuration D


三. Nginx中的rewrite

1. 什麼是rewrite

  • Rewrite對稱URL Rewrite,即URL重寫,就是把傳入Web的請求重定向到其他URL的過程。URL Rewrite最常見的應用是URL僞靜態化,是將動態頁面顯示爲靜態頁面方式的一種技術。比如http://www.123.com/news/index.asp?id=123 使用URLRewrite 轉換後可以顯示爲 http://www.123.com/news/123.html

  • 對於追求完美主義的網站設計師,就算是網頁的地址也希望看起來儘量簡潔明快。形如http://www.123.com/news/index.asp?id=123的網頁地址,自然是毫無美感可言,而用UrlRewrite技術,你可以輕鬆把它顯示爲 http://www.123.com/news/123.html。

  • 理論上,搜索引擎更喜歡靜態頁面形式的網頁,搜索引擎對靜態頁面的評分一般要高於動態頁面。所以,UrlRewrite可以讓我們網站的網頁更容易被搜索引擎所收錄。

  • 從安全角度上講,如果在url中暴露太多的參數,無疑會造成一定量的信息泄漏,可能會被一些黑客利用,對你的系統造成一定的破壞,所以靜態化的url地址可以給我們帶來更高的安全性。


2. rewrite的命令的作用域和優先級

  • 作用域:server,location.
  • rewrite指令可以寫在server和location中.
  • nginx rewrite指令執行順序:

    1. 執行server塊的rewrite指令(這裏的塊指的是server關鍵字後{}包圍的區域,其它xx塊類似)

    2. 執行location匹配

    3. 執行選定的location中的rewrite指令
      如果其中某步URI被重寫,則重新循環執行1-3,直到找到真實存在的文件

例如:


四. Nginx的虛擬主機

1. 什麼是Nginx的虛擬主機

  • 虛擬主機是用來映射網站目錄和網站代碼文件夾的關係.它可以通過server配置, 每個server表示一個虛擬機主機.

2. 標準的虛擬主機配置

http {
	 #默認的虛擬機主機
	 server {
        listen          80 default;
        server_name     _ *;
        access_log      logs/default.access.log main;
        location / {
            index index.html;
            root  /var/www/default/htdocs;
        }
}
#www.domain1.com對應的虛擬主機
    server {
        listen          80;
        server_name     www.domain1.com;
        access_log      logs/domain1.access.log main;
        location / {
            index index.html;
            root  /var/www/domain1.com/htdocs;
        }
}
#www.domain2.com對應的虛擬主機
    server {
        listen          80;
        server_name     www.domain2.com;
        access_log      logs/domain2.access.log main;
        location / {
            index index.html;
            root  /var/www/domain2.com/htdocs;
        }
    }
}

3. 規劃虛擬主機的配置文件

  • 以上全部配置在主配置文件中可能不小心修改掉配置文件導致nginx.conf文件出錯. 可以使用include指令將每個虛擬主機放在一個單獨的配置文件中.

  • 將nginx服務器目錄結構設置爲:

nginx

​ nginx.conf

​ vhost

​ – www.domain1.com.conf

​ – www.domain2.com.conf

  • 每個.conf結尾的文件中保存一個虛擬主機(server)的配置信息.在nginx.conf中通過include指令包含這些配置文件.
  • 在nginx/config/nginx.conf中的配置:
http {
	 #默認的虛擬機主機
	 server {
        listen          80 default;
        server_name     _ *;
        access_log      logs/default.access.log main;
        location / {
            index index.html;
            root  /var/www/default/htdocs;
        }
}
include vhost/*.conf;
}
  • 在nginx/config/vhost/www.domain1.com.conf中的配置:
server {
        listen          80;
        server_name     www.domain1.com;
        access_log      logs/domain1.access.log main;
        location / {
            index index.html;
            root  /var/www/domain1.com/htdocs;
        }
}
  • 在nginx/config/vhost/www.domain2.com.conf中的配置:
server {
        listen          80;
        server_name     www.domain2.com;
        access_log      logs/domain2.access.log main;
        location / {
            index index.html;
            root  /var/www/domain2.com/htdocs;
        }
}

五. 動靜分離

  • 當用戶請求js,css等靜態資源時有當前nginx服務器處理, 請求php動態腳本代碼時由其他的服務器處理(反向代理).
	#配置Nginx動靜分離,定義的靜態頁面直接從Nginx發佈目錄讀取。
    location ~ .*\.(gif|jpg|jpeg|bmp|png|ico|txt|js|css)$ 
    { 
        root /data/www/wugk; 
        #expires定義用戶瀏覽器緩存的時間爲3天,如果靜態頁面不常更新,可以設置更長,這樣可以節省帶寬和緩解服務器的壓力
        expires      3d; 
    } 
    #動態頁面交給其他服務器處理 
    location ~ .*\.(php|jsp|cgi)?$ 
    { 
       #發送給其他服務器處理
    } 
  • 容量符號縮寫
k,K 千字節
m,M 兆字節
  • 時間符號縮寫
ms 毫秒
s
m 分鐘
h 小時
d
w
M 一個月, 30天
y 年, 365 天

六. Nginx的反向代理

1. 什麼是反向代理

  • 反向代理(Reverse Proxy)方式是指以代理服務器來接受internet上的連接請求,然將請求轉發給內部網絡上的服務器,並將從服務器上得到的結果返回給internet上請求連的 客戶端,此時代理服務器對外就表現爲一個服務器。


2. 明確兩個概念

  • web前端服務器: 代理服務器可以作爲前端服務器處理靜態資源
  • web後端服務器: web前端服務器無法處理的動態請求發送給後臺web服務器處理.

3. 特點

  • 反向代理又稱爲Web服務器加速,是針對Web服務器提供加速功能的。它作爲代理

    Cache,但並不針對瀏覽器用戶,而針對一臺或多臺特定Web服務器(這也是反向代理名

    稱的由來)。代理服務器可以緩存一些web的頁面,降低了web服務器的訪問量,所以可

    以降低web服務器的負載。web服務器同時處理的請求數少了,響應時間自然就快了。同

    時代理服務器也存了一些頁面,可以直接返回給客戶端,加速客戶端瀏覽。


4. 反向代理的配置

  • 當用戶放到php文件時,將該請求交給apache服務器處理php文件
server {
        #偵聽192.168.8.x的80端口
        listen             80;
        server_name    www.itsource.cn;

        #對php後綴的進行請求
        location ~ .*\.php$ {
            #定義服務器的默認網站根目錄位置
            root     /root; 
            #定義首頁索引文件的名稱
            index index.php index.html index.htm;
            
            #請求轉向apache服務器,apache服務器運行在81端口上
            proxy_pass    http://localhost:81;

            #以下是一些反向代理的配置可刪除.
            proxy_redirect off;

            #後端的Web服務器可以通過X-Forwarded-For獲取用戶真實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;

            #允許客戶端請求的最大單文件字節數
            client_max_body_size 10m; 

            #緩衝區代理緩衝用戶端請求的最大字節數,
            client_body_buffer_size 128k;

            #nginx跟後端服務器連接超時時間(代理連接超時)
            proxy_connect_timeout 90;

            #連接成功後,後端服務器響應時間(代理接收超時)
            proxy_read_timeout 90;

            #設置代理服務器(nginx)保存用戶頭信息的緩衝區大小
            proxy_buffer_size 4k;

            #proxy_buffers緩衝區,網頁平均在32k以下的話,這樣設置
            proxy_buffers 4 32k;

            #高負荷下緩衝大小(proxy_buffers*2)
            proxy_busy_buffers_size 64k; 

            #設定緩存文件夾大小,大於這個值,將從upstream服務器傳
            proxy_temp_file_write_size 64k; 
        }
    }

5. 可以將代理配置單獨放在一個配置文件中

  • 存放代理配置的nginx/conf/proxy.conf: 其他的server虛擬主機都可以使用該配置.
			#以下是一些反向代理的配置可刪除.
            proxy_redirect off;

            #後端的Web服務器可以通過X-Forwarded-For獲取用戶真實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;

            #允許客戶端請求的最大單文件字節數
            client_max_body_size 10m; 

            #緩衝區代理緩衝用戶端請求的最大字節數,
            client_body_buffer_size 128k;

            #nginx跟後端服務器連接超時時間(代理連接超時)
            proxy_connect_timeout 90;

            #連接成功後,後端服務器響應時間(代理接收超時)
            proxy_read_timeout 90;

            #設置代理服務器(nginx)保存用戶頭信息的緩衝區大小
            proxy_buffer_size 4k;

            #proxy_buffers緩衝區,網頁平均在32k以下的話,這樣設置
            proxy_buffers 4 32k;

            #高負荷下緩衝大小(proxy_buffers*2)
            proxy_busy_buffers_size 64k; 

            #設定緩存文件夾大小,大於這個值,將從upstream服務器傳
            proxy_temp_file_write_size 64k;
  • 使用代理配置文件:
server {
        listen             80;
        server_name    www.itsource.cn;

        #對php後綴的進行請求
        location ~ .*\.php$ {
            #定義服務器的默認網站根目錄位置
            root     /root; 
            #定義首頁索引文件的名稱
            index index.php index.html index.htm;
            
            #請求轉向apache服務器,apache服務器運行在81端口上
            proxy_pass    http://localhost:81;

            #以下是一些反向代理的配置可刪除.
            include proxy.conf;
        }
    }

七. Nginx的負載均衡

1. 什麼是負載均衡

  • 後臺服務器組成了一個服務器集羣(多臺服務器). 有中間服務器(nginx)接受到請求分發給不同的服務器後臺. 該nginx就是一個負載均衡服務器.

2. 負載均衡的優點

  • 分散後臺服務器的壓力
  • 自動去掉掛掉的後臺服務器
  • 緩存後臺服務器響應內容

3. 負載均衡的分配策略

  • nginx 的 upstream目前支持 4 種方式的分配

a. 輪詢(默認)
每個請求按時間順序逐一分配到不同的後端服務器,如果後端服務器down掉,能自動剔除。

b. weight
指定輪詢機率,weight和訪問比率成正比,用於後端服務器性能不均的情況。

c. ip_hash
每個請求按訪問ip的hash結果分配,這樣每個訪客固定訪問一個後端服務器,可以解決session的問題。
d. fair(第三方)
按後端服務器的響應時間來分配請求,響應時間短的優先分配。
e. url_hash(第三方)
按訪問url的hash結果來分配請求,使每個url定向到同一個後端服務器,後端服務器爲緩存時比較有效。


4. 負載均衡配置

  • 在http節點裏添加:
#定義負載均衡設備的 ip及設備狀態 
upstream myServer {   
server 127.0.0.1:9090 down; 
    server 127.0.0.1:8080 weight=2; 
    server 127.0.0.1:6060; 
    server 127.0.0.1:7070 backup; 
[ip_hash | fair | url_hash]
}
  • 在需要使用負載的server節點下添加
proxy_pass http://myServer;
  • upstream 每個設備的狀態:

down 表示單前的server暫時不參與負載
weight 默認爲1.weight越大,負載的權重就越大。
max_fails :允許請求失敗的次數默認爲1.當超過最大次數時,返回proxy_next_upstream 模塊定義的錯誤
fail_timeout:max_fails 次失敗後,暫停的時間。
backup: 其它所有的非backup機器down或者忙的時候,請求backup機器。所以這臺機器壓力會最輕。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章