1. 程式人生 > >Ngnix反向代理與負載均衡[轉]

Ngnix反向代理與負載均衡[轉]

web 客戶端連接 虛擬域名 安裝 服務器性能 正則匹配 服務端 file add

nginx啟動和關閉(centos平臺)

/usr/local/nginx/sbin/nginx    #啟動

/usr/local/nginx/sbin/nginx -s reload    #平滑啟動

vi /usr/local/nginx/conf/nginx.conf    #編輯配置文件

http 模塊

  http模塊可以說是最核心的模塊了,它負責HTTP服務器相關屬性的配置,它裏面的server和upstream子模塊

http{
    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"; access_log /usr/local/var/log/nginx/access.log main; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout
10; #gzip on; upstream myproject { ..... } server { .... } }

  log_format  用於設置日誌的格式,和記錄哪些參數,這裏設置為main

  access_log   用來紀錄每次的訪問日誌的文件地址,後面的main是日誌的格式樣式,對應於log_formatmain

  sendfile    參數用於開啟高效文件傳輸模式。將tcp_nopush和tcp_nodelay兩個指令設置為on用於防止網絡阻塞

  keepalive_timeout  

設置客戶端連接保持活動的超時時間。在超過這個時間之後,服務器會關閉該連接

server 模塊

  sever 模塊是http的子模塊,它用來定一個虛擬主機

server {
        listen       8080;
        server_name  localhost 192.168.12.10 www.yangyi.com;
        # 全局定義,如果都是這一個目錄,這樣定義最簡單。
        root   /Users/yangyi/www;
        index  index.php index.html index.htm; 
        charset utf-8;
        access_log  usr/local/var/log/host.access.log  main;
        aerror_log  usr/local/var/log/host.error.log  error;
        ....
}

  server  標誌定義虛擬主機開始

  listen  用於指定虛擬主機的服務端口

  server_name  用來指定IP地址或者域名,多個域名之間用空格分開

  root   表示在這整個server虛擬主機內,全部的root web根目錄。註意要和locate {}下面定義的區分開來

  index   全局定義訪問的默認首頁地址。註意要和locate {}下面定義的區分開來

  charset用於設置網頁的默認編碼格式

  access_log用來指定此虛擬主機的訪問日誌存放路徑,最後的main用於指定訪問日誌的輸出格式

location 模塊

  location模塊是nginx中用的最多的,也是最重要的模塊了,什麽負載均衡啊、反向代理啊、虛擬域名啊都與它相關

location / {
            root   /Users/yangyi/www;
            index  index.php index.html index.htm;
        }

  location /  表示匹配訪問根目錄

  root  指令用於指定訪問根目錄時,虛擬主機的web目錄,這個目錄可以是相對路徑(相對路徑是相對於nginx的安裝目錄)。也可以是絕對路徑

  index  用於設定我們只輸入域名後訪問的默認首頁地址,有個先後順序:index.php index.html index.htm,如果沒有開啟目錄瀏覽權限,又找不到這些默認首頁,就會報403錯誤

  location   還有一種方式就是正則匹配,開啟正則匹配這樣:location ~。後面加個~

upstram 模塊

  upstream 模塊負債負載均衡模塊,通過一個簡單的調度算法來實現客戶端IP到後端服務器的負載均衡

upstream iyangyi.com{
    ip_hash;
    server 192.168.12.1:80;
    server 192.168.12.2:80 down;
    server 192.168.12.3:8080  max_fails=3  fail_timeout=20s;
    server 192.168.12.4:8080;
}

  在上面的例子中,通過upstream指令指定了一個負載均衡器的名稱iyangyi.com。這個名稱可以任意指定,在後面需要的地方直接調用即可。

  裏面是ip_hash這是其中的一種負載均衡調度算法,下面會著重介紹。緊接著就是各種服務器了。用server關鍵字表識,後面接ip。

Nginx的負載均衡模塊目前支持4種調度算法:

  1. weight 輪詢(默認)。每個請求按時間順序逐一分配到不同的後端服務器,如果後端某臺服務器宕機,故障系統被自動剔除,使用戶訪問不受影響。weight。指定輪詢權值,weight值越大,分配到的訪問機率越高,主要用於後端每個服務器性能不均的情況下。
  2. ip_hash。每個請求按訪問IP的hash結果分配,這樣來自同一個IP的訪客固定訪問一個後端服務器,有效解決了動態網頁存在的session共享問題。
  3. fair。比上面兩個更加智能的負載均衡算法。此種算法可以依據頁面大小和加載時間長短智能地進行負載均衡,也就是根據後端服務器的響應時間來分配請求,響應時間短的優先分配。Nginx本身是不支持fair的,如果需要使用這種調度算法,必須下載Nginx的upstream_fair模塊。
  4. url_hash。按訪問url的hash結果來分配請求,使每個url定向到同一個後端服務器,可以進一步提高後端緩存服務器的效率。Nginx本身是不支持url_hash的,如果需要使用這種調度算法,必須安裝Nginx 的hash軟件包。

在HTTP Upstream模塊中,可以通過server指令指定後端服務器的IP地址和端口,同時還可以設定每個後端服務器在負載均衡調度中的狀態。常用的狀態有:

  • down,表示當前的server暫時不參與負載均衡。
  • backup,預留的備份機器。當其他所有的非backup機器出現故障或者忙的時候,才會請求backup機器,因此這臺機器的壓力最輕。
  • max_fails,允許請求失敗的次數,默認為1。當超過最大次數時,返回proxy_next_upstream 模塊定義的錯誤。
  • fail_timeout,在經歷了max_fails次失敗後,暫停服務的時間。max_fails可以和fail_timeout一起使用。

註意 當負載調度算法為ip_hash時,後端服務器在負載均衡調度中的狀態不能是weight和backup。

Ngnix反向代理與負載均衡[轉]