Ngnix 基礎知識大補

Nginx 概念

是一款輕量級的Web 服務器/反向代理服務器及電子郵件代理服務器,在BSD-like 協議下發行。其特點是佔有內存少,併發能力強,事實上nginx的併發能力在同類型的網頁服務器中表現較好。

Ngnix 基礎知識大補


Nginx 優點

  • 在連接高併發的情況下,Nginx是Apache服務不錯的替代品:Nginx在美國是做虛擬主機生意的老闆們經常選擇的軟件平臺之一。能夠支持高達 50,000 個併發連接數的響應。
  • Nginx作為負載均衡服務

Nginx 既可以在內部直接支持 Rails 和

PHP 程序對外進行服務,也可以支持作為

HTTP代理服務對外進行服務。

  • 處理靜態文件,索引文件以及自動索引;打開文件描述符緩衝。
  • 無緩存的反向代理加速,簡單的負載均衡和容錯。
  • 模塊化的結構。包括 gzipping, byte ranges, chunked responses,以及 SSI-filter 等 filter。如果由 FastCG或其它代理服務器處理單頁中存在的多個 SSI,則這項處理可以並行運行,而不需要相互等待。

Nginx 正向代理

代理的是客戶端,是一個位於客戶端和原始服務器之間的服務器,為了從原始服務器取得內容,客戶端向代理發送一個請求並指定目標(原始服務器)。

然後代理向原始服務器轉交請求並將獲得的內容返回給客戶端。客戶端必須要進行一些特別的設置才能使用正向代理。

正向代理的用途:

  • 訪問原來無法訪問的資源,如 Google。
  • 可以做緩存,加速訪問資源。
  • 對客戶端訪問授權,上網進行認證。
  • 代理可以記錄用戶訪問記錄(上網行為管理),對外隱藏用戶信息。

Ngnix 基礎知識大補


Nginx 反向代理

客戶端是無感知代理的存在的,反向代理對外都是透明的,訪問者並不知道自己訪問的是一個代理。因為客戶端不需要任何配置就可以訪問。

反向代理,"它代理的是服務端",主要用於服務器集群分佈式部署的情況下,反向代理隱藏了服務器的信息。

反向代理的作用:

  • 保證內網的安全,通常將反向代理作為公網訪問地址,Web 服務器是內網。
  • 負載均衡,通過反向代理服務器來優化網站的負載


Ngnix 基礎知識大補

配置實例

在瀏覽器輸入 www.abc.com , 從 nginx 服務器跳轉到 linux 系統 tomcat 主頁面。具體配置如下。

server {

listen 80;

server_name 192.168.4.32; #監聽地址

location / {

root html; #/html目錄

proxy_pass http://127.0.0.1:8080; #請求轉向index index.html index.htm; #設置默認頁

}

}


Nginx 負載均衡

反向代理服務器的角色,是依據什麼樣的規則進行請求分發的呢?不同的項目應用場景,分發的規則是否可以控制呢?

我們注意到客戶端發送的、Nginx 反向代理服務器接收到的請求數量,就是我們說的負載量

請求數量按照一定的規則進行分發,到不同的服務器處理的規則,就是一種均衡規則

所以將服務器接收到的請求按照規則分發的過程,稱為負載均衡。

負載均衡在實際項目操作過程中,有硬件負載均衡和軟件負載均衡兩種,硬件負載均衡也稱為硬負載,如 F5 負載均衡,相對造價昂貴成本較高。

但是數據的穩定性安全性等等有非常好的保障,如中國移動中國聯通這樣的公司才會選擇硬負載進行操作。

Ngnix 基礎知識大補


Nginx 調度算法

  • 默認輪詢:每個請求按時間順序逐一分配到不同的後端服務器;
  • ip_hash:每個請求按訪問IP的hash結果分配,同一個IP客戶端固定訪問一個後端服務器;

upstream myserver {

ip_hash;

server 192.167.4.32:5000;

server 192.168.4.32:8080;

}

  • url_hash:按訪問url的hash結果來分配請求,使每個url定向到同一個後端服務器;
  • fair:更加智能的負載均衡算法,可以依據頁面大小和加載時間長短智能地進 行負載均衡,也就是根據後端服務器的響應時間來分配請求,響應時間短的優先分配。

Nginx本身是不支持 fair的,使用這種調度算法,須下載Nginx upstream_fair模塊。


Nginx常用命令

  • nginx -s reload :修改配置後重新加載生效
  • nginx -s reopen :重新打開日誌文件
  • nginx -t -c /path/to/nginx.conf 測試nginx配置文件是否正確
  • nginx -s stop :快速停止nginx
  • nginx -s quit :完整有序的停止nginx
  • 具體的命令可以通過:nginx -h 查看


Nginx 負載均衡的作用及應用場景

  • 解決併發壓力,提高應用處理性能(增加吞吐量,加強網絡處理能力);
  • 提供故障轉移,實現高可用;
  • 通過添加或減少服務器數量,提供網站伸縮性(擴展性);
  • 安全防護;(負載均衡設備上做一些過濾,黑白名單等處理)
  • 應用場景:用於高訪問量的業務,橫向擴張系統,消除單點故障等


常用 Web 服務器比對

  • apache是同步多進程模型,一個連接對應一個進程。
  • nginx是異步的,多個連接(萬級別)可以對應一個進程。
  • 一般來說,需要性能的web服務,用nginx。如果不需要性能只求穩定,更考慮apache。
  • apache的各種功能模塊實現比nginx好,例如ssl的模塊就比nginx好,可配置項多。epoll(freebsd上是kqueue)網絡IO模型是nginx處理性能高的根本理由,但並不是所有的情況下都是epoll大獲全勝的,如果本身提供靜態服務的就只有寥寥幾個文件。
  • apache的select模型或許比epoll更高性能。當然,這只是根據網絡IO模型的原理作的一個假設,真正的應用還是需要實測。
  • 通用的方案是,前端nginx抗併發,後端apache集群,配合起來會更好。
  • Nginx 配置簡潔, Apache 複雜 ;
  • nginx處理靜態文件好,耗費內存少;
  • 動態請求由apache去做,nginx只適合靜態和反向;
  • Nginx適合做前端服務器,負載性能很好;


分享到:


相關文章: