Nginx概述
一. Nginx簡介
Nginx(發音爲"engine X")是俄羅斯人編寫的十分輕量級的HTTP 服務器,是一個高性能的HTTP和反向代理服務器,同時也是一個IMAP/POP3/SMTP 代理服務器。
Nginx 因爲它的穩定性、豐富的模塊庫、靈活的配置和低系統資源的消耗而聞名。業界一致認爲它是Apache2.2+mod_proxy_balancer 的輕量級代替者,不僅是因爲響應靜態頁面的速度非常快,而且它的模塊數量達到Apache 的近2/3。對proxy 和rewrite 模塊的支持很徹底,還支持mod_fcgi、ssl、vhosts ,適合用來做mongrel clusters 的前端HTTP 響應。
目前Nginx在國內很多大型企業都有應用,且普及率呈逐年上升趨勢。Nginx的優勢如下:
- 它可以支持5W高併發連接;
- 內存消耗少;
- 成本低。
二. 應用場景
-
網關
面向客戶訪問的總入口
-
虛擬主機
一臺Nginx同時爲多個{域名:端口}提供服務
-
路由和反向代理
提供反向代理,整合一系列服務
-
靜態服務器
提供對前端頁面、樣式等靜態資源的訪問
-
集羣負載均衡
使用upstream,負載多個Web Server(如Tomcat)
三. 架構設計
-
模塊化設計
高度模塊化的設計是Nginx 的架構基礎。Nginx 服務器被分解爲多個模塊,每個模塊就是一個功能模塊,只負責自身的功能,模塊之間嚴格遵循“高內聚,低耦合”的原則。
-
核心模塊
核心模塊是Nginx 服務器正常運行必不可少的模塊,提供錯誤日誌記錄、配置文件解析、事件驅動機制、進程管理等核心功能。
-
標準HTTP模塊
標準HTTP 模塊提供HTTP 協議解析相關的功能,如:端口配置、網頁編碼設置、HTTP 響應頭設置等。
-
可選HTTP模塊
可選HTTP 模塊主要用於擴展標準的HTTP 功能,讓Nginx 能處理一些特殊的服務,如:Flash 多媒體傳輸、解析GeoIP 請求、SSL 支持等。
-
郵件服務模塊
郵件服務模塊主要用於支持Nginx 的郵件服務,包括對POP3 協議、IMAP 協議和SMTP 協議的支持。
-
第三方模塊
第三方模塊是爲了擴展Nginx 服務器應用,完成開發者自定義功能,如:Json支持、Lua 支持等。
-
Master-Worker多進程模型
Nginx服務器每當收到一個客戶端請求時,就由服務器主進程(Master)生成一個子進程(Worker)出來和客戶端建立連接進行交互,直到連接斷開,該子進程才結束。
多進程模式的優勢:
- 各個進程之間相互獨立,不需要加鎖,減少了資源競爭對性能造成影響;
- 進程互相之間不會影響,如果一個進程發生異常退出時,其它進程仍然可以正常工作,Master進程則很快啓動新的Worker進程,確保服務不中斷,將風險降到最低;
- 降低編程的複雜度,降低開發成本。
多進程模式的缺點:
-
操作系統生成一個子進程需要進行內存複製等操作,在資源和時間上會產生一定的開銷;
-
當有大量請求時,創建大量的進程,會導致系統性能下降。
-
epoll模式
相較於傳統的select和poll模式,epoll的優勢如下:
- 支持一個進程打開大數目的socket描述符(FD);
- IO效率不隨FD數目增加而線性下降;
- 使用mmap加速內核與用戶空間的消息傳遞。
-
正向代理 VS 反向代理
-
代理(正向代理):指一個位於客戶端和原始服務器(origin server)之間的服務器,爲了從原始服務器取得內容,客戶端向代理髮送一個請求並指定目標(原始服務器),然後代理向原始服務器轉交請求並將獲得的內容返回給客戶端。
正向代理是順着請求的方向進行的代理,主要是爲客戶端服務的。
-
反向代理:實際運行方式是指以代理服務器來接受internet上的連接請求,然後將請求轉發給內部網絡上的服務器,並將從服務器上得到的結果返回給internet上請求連接的客戶端,此時代理服務器對外就表現爲一個服務器。
反向代理是爲內部服務器服務的。
-
四. 安裝
-
下載源碼包,並解壓
wget http://nginx.org/download/nginx-1.15.8.tar.gz tar -zxvf nginx-1.15.8.tar.gz cd nginx-1.15.8
-
配置
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
-
編譯並安裝
make && make install
五. 常用命令
-
啓動
./nginx (-c nginx.conf的文件) #如果不指定,默認爲NGINX_HOME/conf/nginx.conf
-
停止
./nginx -s stop
-
退出
./nginx -s quit
-
重新加載配置
./nginx -s reload
-
檢查配置
./nginx -t