Nginx入門

1. Nginx 是什麼

nginx [engine x]是一個HTTP和反向代理服務器,一個郵件代理服務器和一個通用的TCP / UDP代理服務器,最初由Igor Sysoev編寫。很長一段時間以來,它一直在許多負載很重的俄羅斯網站上運行,包括 Yandex, Mail.Ru, VK和 Rambler。據Netcraft稱,nginx 在2019年6月服務或代理了 26.34%最繁忙的網站.html

2. Nginx的功能

基本的HTTP服務器功能、其餘HTTP服務器功能、郵件代理服務器功能nginx

2.1 基本的HTTP服務器功能

  • 提供靜態和 索引 文件, 自動索引 ; 打開文件描述符緩存(暫時理解動靜分離) ;
  • 經過緩存加速反向代理 ; 負載均衡和容錯 ;
  • 經過緩存FastCGI, uwsgi, SCGI和 memcached 服務器加速支持 ;
  • 模塊化架構。過濾器包括 gzipping,字節範圍,分塊響應, XSLT, SSI和圖像變換過濾器。若是由代理或FastCGI / uwsgi / SCGI服務器處理,則能夠並行處理單個頁面中的多個SSI包含;
  • SSL和TLS SNI支持 ;
  • 支持HTTP 2.0, 具備加權和基於依賴性的優先級。

2.2 其餘的HTTP服務器功能

  • 基於名稱和基於IP的 負載均衡 ;
  • 保持鏈接 和流水線鏈接支持;
  • 訪問日誌格式, 緩衝日誌寫入, 快速日誌輪換和 syslog日誌記錄 ;
  • 3xx-5xx錯誤代碼 重定向 ;
  • 重寫模塊: 使用正則表達式更改URI ;
  • 根據 客戶端地址執行不一樣的功能 ;
  • 基於客戶端IP地址, 密碼(HTTP基自己份驗證)和 子請求結果的訪問控制 ;
  • 驗證 HTTP referer ;
  • 該PUT,DELETE,MKCOL,複製和移動方法;
  • FLV 和 MP4 流媒體;
  • 響應速度限制 ;
  • 限制 來自一個地址的同時鏈接 或 請求的數量 ;
  • 基於IP的地理定位 ;
    A / B測試 ;
    請求鏡像 ;
    嵌入式Perl ;
    njs腳本語言。

2.3 郵件代理服務器功能

  • 用戶 使用外部HTTP 身份驗證 服務器重定向到 IMAP 或 POP3服務器;
  • 使用外部HTTP 身份驗證 服務器進行用戶身份 驗證,並將鏈接重定向到內部 SMTP服務器;
  • 認證方式:
  1. POP3:USER / PASS,APOP,AUTH LOGIN / PLAIN / CRAM-MD5;
  2. IMAP:登陸,AUTH LOGIN / PLAIN / CRAM-MD5;
  3. SMTP:AUTH LOGIN / PLAIN / CRAM-MD5;
  • SSL支持;
  • STARTTLS和STLS支持。

2.4 TCP / UDP代理服務器功能

  • TCP和UDP的通用代理 ;
  • SSL和TLS SNI支持TCP;
  • 負載均衡和容錯 ;
  • 基於客戶端地址的訪問控制 ;
  • 根據客戶端地址執行不一樣的功能 ;
  • 限制 來自一個地址的同時鏈接數 ;
  • 訪問日誌格式, 緩衝日誌寫入, 快速日誌輪換和 syslog日誌記錄 ;
  • 基於IP的地理定位 ;
  • A / B測試 ;
  • njs腳本語言。

3. 下載Nginx

下載地址web

我這裏下載的是Windows版本.正則表達式

解壓打開以下:後端

4. 使用Nginx

在Nginx目錄的搜索欄,敲入cmd數組

輸入命令start nginx便可啓動Nginx瀏覽器

在瀏覽器訪問 localhost:緩存

其餘的一些經常使用命令:服務器

nginx -s stop 快速關閉
nginx -s quit 優雅關閉
nginx -s reload 從新加載配置文件
nginx -s reopen 從新打開日誌文件架構

4.1 Nginx的配置文件

nginx的配置文件在/conf/nginx.conf,nginx由模塊組成,這些模塊由配置文件中指定的指令控制。指令分爲簡單指令和塊指令

一個簡單的指令由名稱和參數組成,用空格分隔,以分號(;)結尾。

塊指令與簡單指令具備相同的結構,但它不是以分號結尾,而是以大括號{}包圍的一組附加指令結束。若是塊指令在大括號內能夠有其餘指令,則稱爲上下文(示例: events, http, server和 location)。

"#" 表示註解

4.2 使用nginx訪問靜態資源的例子

  1. 在/conf/ 目錄下,將原來的nginx.conf文件更名爲nginx.conf1,而且建立一個空白的nginx.conf文件

  2. 修改nginx.conf文件

##工做線程, 建議和cpu數量相同
worker_processes  4;

#工做模式與鏈接數上限
events {
#單個進程最大鏈接數(最大鏈接數=鏈接數*進程數)
    worker_connections  1024;
}


#設定http服務器
http {
#虛擬主機的配置
    server {
    
#對 "/" 啓用反向代理
    location / {
        # 制定靜態資源的位置
            root D://web_resources//static//;
        
        }
        
        location /images/ {
                root D://web_resources//static//;
            }
    
    }
    
    
    
    
    
    
}

本地圖片的路徑 : D:\web_resources\static\images\1.png

本地頁面的路徑: D:\web_resources\static\index.html

也就是所 root的路徑+ location後面的路徑 = 實際文件存放的文件夾路徑

訪問測試:

成功了有沒有.

4.3 nginx設置代理服務器

nginx的一個常見用途是將其設置爲代理服務器,這意味着服務器接收請求,將它們傳遞給代理服務器,從中檢索響應,而後將它們發送給客戶端。

接下來作一個簡單的動靜分離的例子, 靜態資源訪問指向本地目錄,動態資源代理本地的一個8080端口的web服務.

修改nginx.conf文件

http {
    server {
    
        location / {
            
            # 代理的地址
            proxy_pass http://localhost:8080;
                
            }

        # 該參數是一個正則表達式匹配以gif,.jpg或.png結尾的URL
        #相應的請求將映射到該D://web_resources//static//; 目錄。
        location ~ \.(gif|jpg|png|html)$ {
        
            root D://web_resources//static//;
            
            }
    
    
    }
    
    
    
}

訪問8080端口的服務:

確實被轉發過去了.

訪問靜態資源:

5. Nginx負載均衡

除了動靜分離,Nginx的負載均衡也是經常使用的一個功能.

nginx支持如下負載平衡機制(或​​方法):

  • 循環 - 對應用程序服務器的請求以循環方式分發,
  • 最少鏈接 - 下一個請求被分配給活動鏈接數最少的服務器,
  • ip-hash - 哈希函數用於肯定應爲下一個請求選擇哪一個服務器(基於客戶端的IP地址)。

5.1 Nginx默認負載均衡

若是未特別配置負載平衡方法,則默認爲循環。

修改nginx.conf文件

http {
    
    

        #負載均衡
        upstream myapp1 {
                    server localhost:8080;
                    server localhost:8081;
                    server localhost:8082;
                        }   

    server {
        # nginx監聽的端口
        listen 80;

        location / {
            proxy_pass http://myapp1;
        }
    }
    
    
 
        
}

屢次請求頁面,請求均勻的負載在每一個服務上:

輸出語句的數量相同.

5.2 最小鏈接負載平衡

另外一個負載平衡規則是最少鏈接的。在某些請求須要更長時間才能完成的狀況下,最小鏈接容許更公平地控制應用程序實例上的負載。

使用最少鏈接的負載平衡,nginx將嘗試不會使繁忙的應用程序服務器超載請求過多,而是將新請求分發給不太繁忙的服務器。

當 least_conn指令用做服務器組配置的一部分時,將激活nginx中的最小鏈接負載平衡

#負載均衡
        upstream myapp1 {
        # 最少鏈接負載均衡指令
        least_conn;
                    server localhost:8080;
                    server localhost:8081;
                    server localhost:8082;
                        }

5.3 ip地址綁定

請注意,經過循環或最少鏈接的負載平衡,每一個後續客戶端的請求可能會分發到不一樣的服務器。沒法保證同一客戶端始終指向同一服務器。

若是須要將客戶端綁定到特定的應用程序服務器 - 換句話說,就始終嘗試選擇特定服務器而言,使客戶端的會話「粘滯」或「持久」 - ip-hash負載平衡機制能夠是用過的。

使用ip-hash,客戶端的IP地址將用做散列密鑰,以肯定應爲客戶端的請求選擇服務器組中的哪一個服務器。此方法可確保來自同一客戶端的請求始終定向到同一服務器,但此服務器不可用時除外。

配置方式和上面相似, 添加指令ip_hash:

#負載均衡
        upstream myapp1 {
        # 最少鏈接負載均衡指令
        ip_hash;
                    server localhost:8080;
                    server localhost:8081;
                    server localhost:8082;
                        }

5.4 加權負載平衡

在上面的示例中,未配置服務器權重,這意味着全部指定的服務器都被視爲對特定負載平衡方法具備同等資格。

當 爲服務器指定權重參數時, 權重被計入負載平衡決策的一部分。

修改配置文件:

upstream myapp1 {
                #upstream的負載均衡,weight是權重,能夠根據機器配置定義權重。weigth參數表示權值,權值越高被分配到的概率越大。
                    server localhost:8080 weight = 3;
                    server localhost:8081;
                    server localhost:8082;
    }

使用此配置,每5個新請求將分佈在應用程序實例中,以下所示:3個請求將定向到8080端口,一個請求將轉到8081端口,另外一個請求轉到8082端口。

6. 健康檢查

兩個參數max_fails和fail_timeout,用於判斷後端節點狀態.

在fail_timeout的時間範圍內鏈接服務器通訊失敗的次數若是超過max_fail,那麼服務器被斷定爲不可用.而且再次等待一個fail_timeout的時間,再去從新嘗試請求.

fail_timeout的默認值爲30s,,max_fails的默認值爲1.

配置方式:

#負載均衡
        upstream myapp1 {
        
        server localhost:8080 weight=3 max_fails=10 fail_timeout=30;
        server localhost:8081;
        server localhost:8082;
                        }
相關文章
相關標籤/搜索