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種的某些種