Nginx主要運用場景:html
一、靜態資源服務前端
經過本地文件系統提供服務linux
二、反向代理服務nginx
Nginx的強大功能;正則表達式
緩存;apache
負載均衡。緩存
3.API服務服務器
OpenResty網絡
ngnix功能特性:併發
1.ngnix提供基本HTTP服務
能夠做爲HTTP代理服務器和單項代理服務器,支持經過緩存加速訪問,能夠完成簡單的負載均衡和容錯,支持包過濾功能,支持ssl等。
2.nginx提供高級HTTP服務
能夠進行自定義配置,支持虛擬主機,支持URL重定向,支持網絡監控,支持流媒體傳輸等。
3.ngnix做爲郵件服務器
nginx做爲郵件服務器是最先開發這個產品的目的之一,它支持IMAP/POP3代理服務功能,支持內部SMTP代理服務功能。
ngnix爲何會出現?
1.互聯網的數據量快速增加;
2.摩爾定律:性能提高;
3.低效的Apache:apache在設計時使用了以「進程」爲基礎的結構,致使Apache再多處理器環境中性能有所降低。
nginx的優勢:
1.高併發,高性能;
2.可擴展性好;
3.高可靠性;
4.熱部署;
5.BSD許可證;
ngnix組成部分:
ngnix二進制可執行文件:由各模塊源碼編譯出的一個文件;
ngnix.conf配置文件:控制ngnix的行爲;
access.log訪問日誌:記錄每一條http請求信息;
error.log錯誤日誌:定位問題;
nginx服務的信號控制:
nginx服務在運行時,會保持一個主進程和一個或多個worker process工做進程。
1.獲取主進程的進程號PID,有2種途徑:第一種,在nginx服務啓動之後,默認在ngnix服務器安裝目錄下的logs目錄中會產生文件名爲nginx.pid的文件,此文件中保持的就是nginx服務主進程的PID。(此文件的存放路徑和文件名都是可配置的)
第二種:使用linux平臺下查看進程的工具ps,使用方法是:
ps -ef | grep nginx
2.nginx服務可接收的信號
向nginx服務主進程發送信號有2種方式,一種是使用nginx二進制文件,另外一種是使用kill命令發送信號,用法是 kill SIGNAL PID
也可使用nginx.pid動態獲取PID號:
kill SIGNAL `filepath`
其中,filepath爲nginx.pid的路徑。
3.nginx服務的啓動
在linux平臺下,啓動nginx服務器直接運行安裝目錄下sbin目錄中的二進制文件便可。
可使用ps -ef | grep nginx查看nginx服務的進程狀態。
在nginx的幫助信息中,能夠看到nginx可使用一些參數。
-h 或者 -? 用來打印二進制文件nginx的用法,也就是當前顯示的內容;
-v 顯示nginx服務器的版本號;
-V 顯示nginx服務器版本號和nginx服務器編譯狀況;
-t 檢查nginx服務器配置文件是否有語法錯誤,能夠與-c聯用,使輸出內容更詳細;-q與-t聯用,配置文件無錯誤時,不輸出;
-s signal 用來向nginx服務的主進程發送信號;
-p prefix用來改變nginx的安裝路徑,經常使用在平滑升級nginx服務器的場合;
-c filename 指定啓動nginx服務使用的配置文件;
-g directives 用來補充nginx配置文件,向nginx服務指定啓動時應用於全局的配置。
4.nginx服務的中止
中止nginx服務的操做比較多,能夠發送信號:
./sbin/Nginx -g TERM | INT | QUIT
其中,TERM和INT信號用於快速中止,QUIT用於平緩中止。
或者:
kill TERM | INT | QUIT `/Nginx/logs/nginx.pid`
固然也可使用kill命令向進程發送-9或者SIGKILL信號強制關閉nginx服務,但不建議這樣作。
kill -9 | SIGKILL `/Nginx/logs/nginx.pid`
5.nginx服務的平滑重啓:
./sbin/nginx -g HUP -C [ newConfFile ]
HUP信號用於發送平滑重啓信號。 newConfFile用於指定新配置文件的路徑。
或者使用了新的配置文件代替舊的配置文件後,使用:
kill HUP `/Nginx/logs/nginx.pid`
也能夠實現平滑重啓。
6.nginx服務的平滑升級
將舊服務器的安裝路徑改成新服務器的安裝路徑,備份舊服務器,安裝新服務器便可。
作好準備工做之後,使用如下命令實現Nginx服務的平滑升級:
./sbin/Nginx -g USR2
其中,USR2信號用於發送平滑升級信號。或者,使用:
kill USR2 `/Nginx/logs/nginx.pid`
經過ps -ef | grep nginx查看新的Nginx服務啓動正常,再使用:
./sbin/Nginx -g WINCH
其中,WINCH信號用於發送平滑中止舊服務信號。或者,使用:
kill WINCH `/Nginx/logs/nginx.pid`
這樣就在不中止提供Web服務的前提下完成了Nginx服務器的平滑升級。
7.nginx服務器基礎配置指令
第一:nginx.conf文件的結構
nginx.conf一共由三部分組成,分別爲全局塊、events塊和http塊。在http塊中,又包含http全局塊、多個server塊。每一個server塊中,能夠包含server全局塊和多個location塊。在同一配置塊中嵌套的配置塊,各個之間不存在次序關係。
若是某個指令在兩個不一樣層級的塊中同時出現,則採用「就近原則」,即以較低層級塊中的配置爲準。
全局塊是默認配置文件從開始到events塊之間的一部份內容,主要設置一些影響Nginx服務器總體運行的配置指令,所以,這些指令的做用域是Nginx服務器全局。一般包括配置運行Nginx服務器的用戶(組)、容許生成的worker process數、Nginx進程PID存放路徑、日誌的存放路徑和類型以及配置文件引入等。
events塊涉及的指令主要影響Nginx服務器與用戶的網絡鏈接。經常使用到的設置包括是否開啓對多worker process下的網絡鏈接進行序列化,是否容許同時接收多個網絡鏈接,選取哪一種事件驅動模型處理鏈接請求,每一個worker process能夠同時支持的最大鏈接數等。
http塊是Nginx服務器配置中的重要部分,代理、緩存和日誌定義等絕大多數的功能和第三方模塊的配置均可以放在這個模塊中。能夠在http全局塊中配置的指令包括文件引入、MIME-Type定義、日誌自定義、是否使用sendfile傳輸文件、鏈接超時時間、單鏈接請求數上限等。http塊能夠包含本身的全局塊,也能夠包含多個server塊,server塊中能夠包含location塊。
在server全局塊中,最多見的兩個配置項是本虛擬主機的監聽配置和本虛擬主機的名稱或IP配置。
location塊:地址定向、數據緩存和應答控制等功能都是在這部分實現。許多第三方模塊的配置也是在location塊中提供功能。
第二:配置運行nginx服務器用戶(組)
user user [group];
■ user,指定能夠運行Nginx服務器的用戶。
■ group,可選項,指定能夠運行Nginx服務器的用戶組。
只有被設置的用戶或者用戶組成員纔有權限啓動Nginx進程,若是是其餘用戶嘗試啓用Nginx進程,將會報錯:
若是但願全部用戶均可以啓動Nginx進程,有兩種辦法:一是將此指令行註釋掉:
#user [user] [group];
或者將用戶(和用戶組)設置爲nobody:
user nobody nobody;
這也是user指令的默認配置。user指令只能在全局塊中配置。
注意:在Nginx配置文件中,每一條指令配置都必須以分號結束
第三:配置容許生成的worker process數
worker process是Nginx服務器實現併發處理服務的關鍵所在。
配置容許生成的worker process數的指令是worker_processes,其語法格式爲:
worker_processes number | auto;
■ number,指定Nginx進程最多能夠產生的worker process數。
■ auto,設置此值,Nginx進程將自動檢測。
在默認的配置文件中,number=1。啓動Nginx服務器之後,使用如下命令能夠看到Nginx服務器除了主進程master process ../sbin/nginx以外,還生成了一個worker process:
此指令只能在全局塊中設置。
第4、配置nginx進程PID存放路徑
Nginx支持對它的存放路徑進行自定義配置,指令是pid,其語法格式爲:
pid file ;
其中,file指定存放路徑和文件名稱。
在指定[path]的時候,必定要包括文件名,若是隻設置了路徑,沒有設置文件名,則會報如下錯誤:
nginx: [emerg] open() "/Nginx/logs/" failed (21: Is a directory)
此指令只能在全局塊中進行配置。
第5、配置錯誤日誌的存放路徑
在全局塊、http塊和server塊中均可以對Nginx服務器的日誌進行相關配置。配置基本相同,只是做用域不一樣。使用的指令是error_log,其語法結構是:
error_log file| stderr [debug | info | notice | warn | error | crit | alert | emerg];
指定的文件對於運行Nginx進程的用戶具備寫權限,不然在啓動Nginx進程的時候會出現如下報錯信息:
nginx: [alert]: could not open error log file: open() "/Nginx/logs/error.log" failed
(13: Permission denied)
第6、配置文件的引入
include file;
第7、設置網絡鏈接的序列化
驚羣:當某一時刻只有一個網絡鏈接到來時,多個睡眠進程會被同時叫醒,但只有一個進程可得到鏈接。若是每次喚醒的進程數目太多,會影響一部分系統性能。在Nginx服務器的多進程下,就有可能出現這樣的問題
爲了解決這樣的問題,Nginx配置中包含了這樣一條指令accept_mutex,當其設置爲開啓的時候,將會對多個Nginx進程接收鏈接進行序列化,防止多個進程對鏈接的爭搶。其語法結構爲:
accept_mutex on | off;
此指令默認爲開啓(on)狀態,其只能在events塊中進行配置。
第8、設置是否容許同時接收多個網絡鏈接
multi_accept on | off;
此指令只能在events塊中進行配置。
第9、事件驅動模型選擇
use method;
其中,method可選擇的內容有:select、poll、kqueue、epoll、rtsig、/dev/poll以及eventport,此指令只能在events塊中進行配置。
第10、配置最大鏈接數
worker_connections number;
默認設置爲512
11、定義MIME-TYPE
用於識別前端請求的資源類型
12、自定義服務器日誌
記錄nginx服務器提供服務過程應答前端請求的日誌:
access_log path [format [butter=size]];
此指令能夠在http塊、server塊或location塊中設置。
十3、配置鏈接超時時間
keepalive_timeout timeout [header_timeout];
keepalive_timeout 120s 100s;其含義是,在服務器端保持鏈接的時間設置爲120 s,發給用戶端的應答報文頭部中Keep-Alive域的超時時間設置爲100 s。
此指令能夠在http塊、server塊或location塊中配置。
十4、單鏈接請求數上限
keepalive_requests number;
此指令還能夠出如今server塊和location塊中,默認設置爲100。
十5、配置網絡監聽
能夠監聽ip地址,或者端口號,listen
十6、虛擬主機配置
基於名稱的虛擬主機配置:
配置主機名稱:server_name name...;
name能夠有一個或者多個名稱組成,用空格隔開。
name能夠用通配符*,單隻能用於頭或尾。
name可使用正則表達式,並使用~做爲正則表達式字符串的開始標記。
Nginx服務器作出以下規定:
a. 對於匹配方式不一樣的,按照如下的優先級選擇虛擬主機,排在前面的優先處理請求。
① 準確匹配server_name
② 通配符在開始時匹配server_name成功
③ 通配符在結尾時匹配server_name成功
④ 正則表達式匹配server_name成功
b. 在以上四種匹配方式中,若是server_name被處於同一優先級的匹配方式屢次匹配成功,則首次匹配成功的虛擬主機處理請求。
基於ip的虛擬主機配置:
十7、配置location塊
location [ = | ~ | ~* | ^~ ] uri { ... }
■ 「=」,用於標準uri前,要求請求字符串與uri嚴格匹配。若是已經匹配成功,就中止繼續向下搜索並當即處理此請求。
■ 「~」,用於表示uri包含正則表達式,而且區分大小寫。
■ 「~*」,用於表示uri包含正則表達式,而且不區分大小寫。
十8、配置請求的根目錄
root path;
一般在location中進行配置
十9、更改location的uri
alias path;
二10、設置網站的默認首頁
index file ...;
二11、設置網站的錯誤頁面
error_page code ... [=[response]] uri
■ code,要處理的HTTP錯誤代碼,常見的在表2.2中已經列出。
■ response,可選項,將code指定的錯誤代碼轉化爲新的錯誤代碼response。
■ uri,錯誤頁面的路徑或者網站地址。若是設置爲路徑,則是以Nginx服務器安裝路徑下的html目錄爲根路徑的相對路徑;若是設置爲網址,則Nginx服務器會直接訪問該網址獲取錯誤頁面,並返回給用戶端。
若是不想將錯誤頁面放到Nginx服務器的安裝路徑下管理,只須要另外使用一個location指令定向錯誤頁面到新的路徑下面了就能夠了。
二12、基於ip配置nginx的訪問權限
allow指令,用於設置容許訪問Nginx的客戶端IP,語法結構爲:
allow address | CIDR | all;
另外一個指令是deny,做用恰好和allow指令相反,它用於設置禁止訪問Nginx的客戶端IP,語法結構爲:
deny address | CIDR | all;
■ address,禁止訪問的客戶端的IP,不支持同時設置多個。若是有多個IP須要設置,須要重複使用deny指令。
■ CIDR,禁止訪問的客戶端的CIDR地址。
■ all,表明禁止全部客戶端訪問。
Nginx配置在解析的過程當中,遇到deny指令或者allow指令是按照順序對當前客戶端的鏈接進行訪問權限檢查的。若是遇到匹配的配置時,則中止繼續向下搜索相關配置。