nginx基礎及應用

Nginx基礎

一、Nginx:原叫engine X, 是一個高性能的HTTP和反向代理服務器,也是一個IMAP/POP3/SMTP反向代理服務器。Nginx是由伊戈爾·賽索耶夫爲俄羅斯訪問量第二的Rambler.ru站點(俄文:Рамблер)開發的,第一個公開版本0.1.0發佈於2004年10月4日。 nginx的模塊化設計使得它具有較好的擴展性,另外,nginx還具有高可靠性、低內存消耗;還支持熱部署(不停機更新配置文件、版本更新等)、事件驅動、AIO、map.

nginx變種:tengine----是由淘寶網發起的Web服務器項目。它在Nginx的基礎上,針對大訪問量網站的需求,添加了很多高級功能和特性。它的目的是打造一個高效、安全的Web平臺。

二、Nginx基本模塊

核心模塊:HTTP 模塊、 EVENT 模塊和 MAIL 模塊
基礎模塊: HTTP Access 模塊、HTTP FastCGI 模塊、HTTP Proxy 模塊和 HTTP Rewrite模塊,
第三方模塊:HTTP Upstream Request Ha

Nginx 的高併發得益於其採用了 epoll 模型,與傳統的服務器程序架構不同,epoll 是linux 內核 2.6 以後纔出現的。 Nginx 採用 epoll 模型,異步非阻塞,而 Apache 採用的是select 模型 sh 模塊、 Notice 模塊和 HTTP Access Key模塊。

Nginx擴展功能:基於名稱和IP的虛擬主機;支持keppalive;支持平滑升級;定製訪問日誌、支持使用日誌 緩衝區提供日誌存儲性能;支持url rewrite;支持路徑別名;支持基於IP及用戶的訪問控制;支持速率限制,支持併發限制

三、Nginx的基本架構:

四、Nginx常用功能

1、Http代理,反向代理:作爲web服務器最常用的功能之一,尤其是反向代理。

Nginx在做反向代理時,提供性能穩定,並且能夠提供配置靈活的轉發功能。Nginx可以根據不同的正則匹配,採取不同的轉發策略,比如圖片文件結尾的走文件服務器,動態頁面走web服務器,只要你正則寫的沒問題,又有相對應的服務器解決方案,你就可以隨心所欲的玩。並且Nginx對返回結果進行錯誤頁跳轉,異常判斷等。如果被分發的服務器存在異常,他可以將請求重新轉發給另外一臺服務器,然後自動去除異常服務器。

2、負載均衡

Nginx提供的負載均衡策略有2種:內置策略和擴展策略。內置策略爲輪詢,加權輪詢,Ip hash。擴展策略,就天馬行空,只有你想不到的沒有他做不到的啦,你可以參照所有的負載均衡算法,給他一一找出來做下實現。

理解這三種負載均衡算法的實現

 Ip hash算法,對客戶端請求的ip進行hash操作,然後根據hash結果將同一個客戶端ip的請求分發給同一臺服務器進行處理,可以解決session不共享的問題。 

3、web緩存

Nginx可以對不同的文件做不同的緩存處理,配置靈活,並且支持FastCGI_Cache,主要用於對FastCGI的動態程序進行緩存。配合着第三方的ngx_cache_purge,對制定的URL緩存內容可以的進行增刪管理。

五、Nginx----IO模型

IO模型:blocking、nonblocking、multiplexing、event-driven、AIO

Nginx:non-blocking、event-driven、AIO

IO類型詳細參考https://blog.csdn.net/minioesina/article/details/89812494

Nginx配置----nginx.conf

main配置段:全局配置段

event{}:定義event模型工作特性

http{}:定義http協議相關的配置

配置指令:要以分號結尾,語法格式

directive value1 [value2...]

支持使用變量:

內置變量:模塊自提供的

自定義變量:set var_name value

主配置段的指令:用於調試、定位問題,正常運行必備的配置,優化性能的配置,事件相關的配置

正常運行必備的配置:

1、user USERNAME [GROUPNAME]  #指定運行的用戶及組

user nginx nginx;

2、pid /path/to/pid_file;    #指定nginx守護進程的pid文件

pid /var/run/ngnix/nginx.pid;

3、worker_rlimit_nofile #;   #指定所有worker進程所能夠打開的最大文件句柄數

性能優化配置:

1、worker_processes #;  worker進程的個數,通常應該少於cpu個數

2、worker_cpu_affinity cpumask ...;   #提升緩存的命中率,因爲context switch會產生CPU的不必要的消耗

      例:worker_cpu_affinity 0000001 00000010 00000100;

3、timer_resolution;   #計時器解析度,降低此值,可以減少gettimeofday()系統調用的次數;默認情況下,每次內核的事                   件調用(如epoll,select,poll,kqueue等)返回時,都會執行一次gettimeofday,實現內核的時鐘來更新nginx的緩存時鐘

4、worker_priority number;  #指明worker進程的nice值,nice值越小,優先級越高

事件相關的配置

1、accept_mutex {off|on};    #master高度用戶請求至各worker進程時使用的負載均衡鎖;on表示能讓多個worker輪流的、                   序列化的去響應新請求

2、lock_file file;    #accept_mutex用到的鎖文件路徑

3、use [epoll|rtsig|select|poll];   #指明使用的事件模型,建議讓nginx自行選擇

4、worker_connections

用於調試、定位問題配置(安裝時安裝了調試功能  --with-debug)

1、daemon {on|off};   #是否以守護進程方式運行nginx,調試時應設置爲off

2、master_process {on|off};    #是否以master/worker模型來運行nginx

3、error_log file | stderr | syslog:server-address[,paraneter-value] | memory:size [debug | info | notice | warn | error |crit |                   alert | emerg]

nginx作爲web時的常用配置 

配置框架:

http {

      upstream { 

      }

      server {

              location url {

                      root "/path/to/somedir";

                      ....

              }#類似於httpd中的<location>;用於定義url與本地文件系統 的映射關係

              location url {

                      if ... {

                          ...

                        }

               } 

      }#每個server類似於httpd中的一個<Virtualhost>;server可以有多個

      server {

      }

}#注意:與http相關的指令僅能夠放置於http、server、location、upstream、if上下文,但有些指令只能用於這5種的某些種

 

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