Nginx的基本使用
1、Nginx的基本介紹
Nginx 就是一個服務(wù)器軟件,它是俄羅斯人編寫的十分輕量級的 HTTP服務(wù)器,它的發(fā)音為“engine X”,是一個高性能的HTTP和反向代理服務(wù)器,同時也是一個IMAP/POP3/SMTP 代理服務(wù)器。
其特點是占有內(nèi)存少,并發(fā)能力強(qiáng),易于開發(fā),部署方便。Nginx 支持多語言通用服務(wù)器。Nginx 專為性能優(yōu)化而開發(fā),能夠經(jīng)受高負(fù)載的考驗,有報告表名能支持高達(dá) 50000 個并發(fā)連接數(shù)。
Nginx 啟動特別容易,并且?guī)缀蹩梢宰龅?*24不間斷運(yùn)行,即使運(yùn)行數(shù)個月也不需要重新啟動。你還能夠不間斷服務(wù)的情況下進(jìn)行軟件版本的升級。
缺點:Nginx 只適合靜態(tài)和反向代理。
優(yōu)點:負(fù)載均衡、反向代理、處理靜態(tài)文件優(yōu)勢。Nginx 處理靜態(tài)請求的速度高于Apache。
Nginx有動態(tài)分離機(jī)制,靜態(tài)請求直接就可以通過Nginx處理,動態(tài)請求才轉(zhuǎn)發(fā)請求到后臺交由Tomcat進(jìn)行處理。
2、Nginx的相關(guān)概念
2.1、正向代理和反向代理
正向代理即是客戶端代理,代理客戶端,服務(wù)端不知道實際發(fā)起請求的客戶端。反向代理即是服務(wù)端代理, 代理服務(wù)端, 客戶端不知道實際提供服務(wù)的服務(wù)端。
正向代理類似一個跳板機(jī),代理訪問外部資源。比如我們國內(nèi)訪問谷歌,直接訪問訪問不到,我們可以通過一個正向代理服務(wù)器,請求發(fā)到代理服,代理服務(wù)器能夠訪問谷歌,這樣由代理去谷歌取到返回數(shù)據(jù),再返回給我們,這樣我們就能訪問谷歌了。

正向代理即是客戶端代理,代理客戶端,服務(wù)端不知道實際發(fā)起請求的客戶端。
正向代理的用途:
(1)訪問原來無法訪問的資源,如google
(2) 可以做緩存,加速訪問資源
(3)對客戶端訪問授權(quán),上網(wǎng)進(jìn)行認(rèn)證
(4)代理可以記錄用戶訪問記錄(上網(wǎng)行為管理),對外隱藏用戶信息
反向代理(Reverse Proxy)實際運(yùn)行方式是指以代理服務(wù)器來接受internet上的連接請求,然后將請求轉(zhuǎn)發(fā)給內(nèi)部網(wǎng)絡(luò)上的服務(wù)器,并將從服務(wù)器上得到的結(jié)果返回給internet上請求連接的客戶端,此時代理服務(wù)器對外就表現(xiàn)為一個服務(wù)器。

反向代理即是服務(wù)端代理, 代理服務(wù)端, 客戶端不知道實際提供服務(wù)的服務(wù)端。
反向代理時,客戶端對代理是無感知的,因為客戶端無需任何配置。客戶端只需將請求發(fā)送給反向代理服務(wù)器,由反向代理服務(wù)器發(fā)送請求給目標(biāo)服務(wù)器并獲取數(shù)據(jù),再返回給客戶端。此時反向代理服務(wù)器和目標(biāo)服務(wù)器對外就像是一個服務(wù)器,暴露的是代理服務(wù)器的地址,隱藏了真實服務(wù)器的 ip 地址。
反向代理的作用:
(1)保證內(nèi)網(wǎng)的安全,阻止web攻擊,大型網(wǎng)站,通常將反向代理作為公網(wǎng)訪問地址,Web服務(wù)器是內(nèi)網(wǎng)
(2)負(fù)載均衡,通過反向代理服務(wù)器來優(yōu)化網(wǎng)站的負(fù)載
參考:http://www.rzrgm.cn/taostaryu/p/10547132.html
2.2、負(fù)載均衡
負(fù)載均衡,英文名稱為Load Balance,其含義就是指將負(fù)載(工作任務(wù))進(jìn)行平衡、分?jǐn)偟蕉鄠€操作單元上進(jìn)行運(yùn)行,例如FTP服務(wù)器、Web服務(wù)器、企業(yè)核心應(yīng)用服務(wù)器和其它主要任務(wù)服務(wù)器等,從而協(xié)同完成工作任務(wù)。形象來說就是,單個服務(wù)器解決不了,我們就增加服務(wù)器的數(shù)量,然后將請求分發(fā)到各個服務(wù)器上,將原先請求集中到單個服務(wù)器上的情況改為將請求分發(fā)到多個服務(wù)器上,將負(fù)載分發(fā)到不同服務(wù)器上。

2.3、動靜分離
Nginx有動態(tài)分離機(jī)制,靜態(tài)請求直接就可以通過 Nginx 處理,動態(tài)請求才轉(zhuǎn)發(fā)請求到后臺交由 Tomcat 進(jìn)行處理。動靜分離簡單來說就是把動態(tài)請求和靜態(tài)請求分開,可以理解為使用 Nginx 處理靜態(tài)頁面,tomcat 處理動態(tài)頁面。動靜分離可以簡單理解為:動態(tài)文件與靜態(tài)文件的分離。
動靜分離將網(wǎng)站靜態(tài)資源(HTML,JavaScript,CSS,img等文件)與后臺應(yīng)用分開部署,提高用戶訪問靜態(tài)代碼的速度,降低對后臺應(yīng)用訪問。比如,我們可以將靜態(tài)資源放到nginx中,動態(tài)資源轉(zhuǎn)發(fā)到tomcat服務(wù)器中。
如果不是動靜分離,即將靜態(tài)資源(html、css、js)和動態(tài)資源(jsp、servlet)都放在同一臺服務(wù)器上,對服務(wù)器的壓力會很大。而如果采用動靜分離,則可以將動態(tài)資源與靜態(tài)資源分離,不部署在同一臺服務(wù)器上,減輕服務(wù)器的壓力。

3、Nginx的安裝
nginx是C語言開發(fā),建議在linux上運(yùn)行。
先安裝Linux系統(tǒng),看參考:http://www.rzrgm.cn/wenxuehai/p/14966942.html
安裝好后,利用遠(yuǎn)程攻擊 putty 連接 Linux 系統(tǒng)。
3.1、安裝依賴
先安裝依賴 gcc、pcre-devel、zlib-devel、openssl-devel,通過 putty 連接 Linux 后,直接在命令行輸入以下命令進(jìn)行安裝:
yum -y install gcc pcre-devel zlib-devel openssl openssl-devel
可能會提示需要 root 權(quán)限,此時是因為你沒有使用 root 用戶連接 Linux,只需退出重新連接,通過 root 用戶來連接即可,該用戶的密碼一般是 123456。
如果提示 yum.pid 已被鎖定,則通過強(qiáng)制命令 rm -f /var/run/yum.pid 來關(guān)閉 yum 進(jìn)程,然后再重新安裝即可。


3.2、下載上傳Nginx
先下載 Nginx,下載連接:https://nginx.org/download/,比如我們下 1.12.2 版本:

然后通過 PuTTY 提供的 PSCP 工具來實現(xiàn)將本地 window 系統(tǒng)的文件上傳到 Linux 系統(tǒng)上,將 Nginx 壓縮包上傳到 Linux 上。
先找到 pscp.exe 程序的所在位置,一般跟 putty.exe 程序在同一目錄,在該目錄下打開命令行,輸入以下命令:
pscp 本地文件完整路徑 用戶名@Linux系統(tǒng)ip:目錄 -- 示例如下: pscp f:\nginx-1.12.2.tar.gz root@192.168.32.128:/usr/src
或者可以通過 SSH Secure File Transfer Client 軟件來上傳文件到 Linux 上,更加方便
3.3、解壓和安裝
上傳成功后進(jìn)行解壓,注意,使用 putty 的連接而不是 pscp 的連接來進(jìn)行解壓。
先切換到 Nginx 的目錄下,即 /usr/src,然后執(zhí)行解壓命令:
cd /usr/src tar -xvf nginx-1.12.2.tar.gz
解壓之后,進(jìn)入到解壓后的 Nginx 目錄,執(zhí)行安裝命令。依次執(zhí)行以下命令:
cd nginx-1.12.2/ ./configure make && make install
3.4、檢驗安裝是否成功
安裝成功之后,可以在 /usr/local 目錄下看到 nginx 目錄

切換到該目錄下,啟動 Nginx:
cd /usr/local/nginx/sbin ./nginx -- 啟動nginx
啟動過后,在本地瀏覽器(即你的 window 系統(tǒng)的瀏覽器)中通過 ip 訪問即可訪問到 Nginx:

因為防火墻的問題,在 window 系統(tǒng)中訪問 Linux 系統(tǒng)的 Nginx 默認(rèn)是無法訪問的。此時我們可以將防火墻關(guān)閉或者是開啟訪問的 80 端口號即可。
下面我們來開啟 80 端口號,可以在服務(wù)器中執(zhí)行如下命令來驗證 80 端口號是否已開啟:
firewall-cmd --query-port=80/tcp
提示 no 信息,即表示 80 端口未開啟,下面我們開啟80端口:
firewall-cmd --add-port=80/tcp --permanent // 重啟防火墻 systemctl restart firewalld
--permanent #永久生效,沒有此參數(shù)重啟后失效
示例:

4、Nginx的常用命令
要想使用 Nginx 的一些命令,連接到 Nginx 后,需要切換到 Nginx 的腳本目錄下:
cd /usr/local/nginx/sbin
4.1、查看Nginx的版本
查看 nginx 的版本可以用 ./nginx -v 命令:

4.2、查看Nginx的狀態(tài)
查看 Nginx 進(jìn)程的狀態(tài)的命令:
ps -ef | grep nginx
Nginx 已啟動時的狀態(tài):

Nginx 關(guān)閉時的狀態(tài):

4.2、啟動Nginx
啟動命令:
./nginx
4.3、關(guān)閉Nginx
關(guān)閉命令:
./nginx -s stop
4.4、重新加載Nginx
在我們修改 Nginx 的配置文件后,可以重啟來讓它重新加載配置文件,但也可以不重啟,直接讓它重新加載即可,此時用重新加載命令即可:
./nginx -s reload
5、Nginx的配置文件
Nginx 的配置文件在 usr/local/nginx/conf 目錄下,在該目錄可以看到 nginx.conf 文件,該文件就是 Nginx 的配置文件:

默認(rèn)的 nginx.conf 文件如下:
#user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' # '$status $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"'; #access_log logs/access.log main; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; #gzip on; server { listen 80; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location / { root html; index index.html index.htm; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # #location ~ \.php$ { # proxy_pass http://127.0.0.1; #} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # #location ~ \.php$ { # root html; # fastcgi_pass 127.0.0.1:9000; # fastcgi_index index.php; # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; # include fastcgi_params; #} # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # #location ~ /\.ht { # deny all; #} } # another virtual host using mix of IP-, name-, and port-based configuration # #server { # listen 8000; # listen somename:8080; # server_name somename alias another.alias; # location / { # root html; # index index.html index.htm; # } #} # HTTPS server # #server { # listen 443 ssl; # server_name localhost; # ssl_certificate cert.pem; # ssl_certificate_key cert.key; # ssl_session_cache shared:SSL:1m; # ssl_session_timeout 5m; # ssl_ciphers HIGH:!aNULL:!MD5; # ssl_prefer_server_ciphers on; # location / { # root html; # index index.html index.htm; # } #} }
nginx.conf 可以看做是由三個部分組成,main、events 和 http。

main(全局設(shè)置)、server(主機(jī)設(shè)置)、upstream(負(fù)載均衡服務(wù)器設(shè)置)和 location(URL匹配特定位置的設(shè)置)。
- main塊設(shè)置的指令將影響其他所有設(shè)置;
- server塊的指令主要用于指定主機(jī)和端口;
- upstream指令主要用于負(fù)載均衡,設(shè)置一系列的后端服務(wù)器;
- location塊用于匹配網(wǎng)頁位置。
這四者之間的關(guān)系式:server繼承main,location繼承server,upstream既不會繼承其他設(shè)置也不會被繼承。
在這四個部分當(dāng)中,每個部分都包含若干指令,這些指令主要包含Nginx的主模塊指令、事件模塊指令、HTTP核心模塊指令,同時每個部分還可以使用其他HTTP模塊指令,例如Http SSL模塊、HttpGzip Static模塊和Http Addition模塊等。
5.1、如何確定Nginx配置文件的位置
由于年代久遠(yuǎn)或者安裝方式差異,可能會忘記nginx配置文件路徑,要想找到nginx配置文件,首先要找到nginx命令,然后通過nginx命令找到配置文件路徑。
參考:https://blog.csdn.net/wangjun5159/article/details/114384336
5.2、全局塊(main)
全局塊主要是從配置文件到 events 塊之間的內(nèi)容,即最外圍的內(nèi)容。主要是用來設(shè)置一些影響 Nginx 服務(wù)器整體運(yùn)行的配置指令。主要包括配置運(yùn)行 Nginx 服務(wù)器的用戶(組)、允許生成的 worker process 數(shù),進(jìn)程 PID 存放路徑、日志存放路徑和類型以及配置文件的引入等。main塊設(shè)置的指令將影響其他所有設(shè)置。
比如上面的:
worker_processes 1;
這是 Nginx 服務(wù)器并發(fā)處理服務(wù)的關(guān)鍵配置, worker_process 值越大,可以支持的并發(fā)處理量也越多,但是會受到硬件、軟件等設(shè)備的制約。
worker_processes是個主模塊指令,指定了Nginx要開啟的進(jìn)程數(shù)。每個Nginx進(jìn)程平均耗費10M~12M內(nèi)存。建議指定和CPU的數(shù)量一致即可。
5.3、events塊
events 塊主要影響 Nginx 服務(wù)器與用戶的網(wǎng)絡(luò)連接,常用的設(shè)置包括是否開啟對多 work process 下的網(wǎng)絡(luò)連接進(jìn)行序列化,是否允許同時接收多個網(wǎng)絡(luò)連接,選取哪種事件驅(qū)動模型來處理連接請求,每個 work process 可以同時支持的最大連接數(shù)等。
比如上面的:
events { worker_connections 1024; }
表示每個 work process 支持的最大連接數(shù)是 1024。worker_connections 用來定義 Nginx 每個進(jìn)程的最大連接數(shù),默認(rèn)是1024。
最大客戶端連接數(shù)由 worker_processes 和 worker_connections 決定,即 Max_client = worker_processes * worker_connections。
5.4、HTTP塊
這里是 Nginx 中配置最頻繁的部分,代理、緩存和日志定義等絕大多數(shù)功能和第三方模塊的配置都在這里進(jìn)行配置。


6、Nginx的工作原理
Nginx 默認(rèn)采用多進(jìn)程工作方式,Nginx啟動后,會運(yùn)行一個master進(jìn)程和多個worker進(jìn)程。其中master充當(dāng)整個進(jìn)程組與用戶的交互接口,同時對進(jìn)程進(jìn)行監(jiān)護(hù),管理worker進(jìn)程來實現(xiàn)重啟服務(wù)、平滑升級、更換日志文件、配置文件實時生效等功能。worker用來處理基本的網(wǎng)絡(luò)事件,worker之間是平等的,他們共同競爭來處理來自客戶端的請求。
Nginx在啟動后,會有一個master進(jìn)程和多個worker進(jìn)程。
nginx的進(jìn)程模型:

6.1、master進(jìn)程(管理進(jìn)程)
master進(jìn)程主要用來管理worker進(jìn)程,具體包括如下4個主要功能:
(1)接收來自外界的信號。
(2)向各worker進(jìn)程發(fā)送信號。
(3)監(jiān)控woker進(jìn)程的運(yùn)行狀態(tài)。
(4)當(dāng)woker進(jìn)程退出后(異常情況下),會自動重新啟動新的woker進(jìn)程。
用戶交互接口:master進(jìn)程充當(dāng)整個進(jìn)程組與用戶的交互接口,同時對進(jìn)程進(jìn)行監(jiān)護(hù)。它不需要處理網(wǎng)絡(luò)事件,不負(fù)責(zé)業(yè)務(wù)的執(zhí)行,只會通過管理worker進(jìn)程來實現(xiàn)重啟服務(wù)、平滑升級、更換日志文件、配置文件實時生效等功能。
重啟work進(jìn)程:我們要控制nginx,只需要通過kill向master進(jìn)程發(fā)送信號就行了。比如kill -HUP pid,則是告訴nginx,從容地重啟nginx,我們一般用這個信號來重啟nginx,或重新加載配置,因為是從容地重啟,因此服務(wù)是不中斷的。
直接給master進(jìn)程發(fā)送信號,這是比較傳統(tǒng)的操作方式,nginx在0.8版本之后,引入了一系列命令行參數(shù),來方便我們管理。比如,./nginx -s reload,就是來重啟nginx,./nginx -s stop,就是來停止nginx的運(yùn)行。如何做到的呢?我們還是拿reload來說,我們看到,執(zhí)行命令時,我們是啟動一個新的nginx進(jìn)程,而新的nginx進(jìn)程在解析到reload參數(shù)后,就知道我們的目的是控制nginx來重新加載配置文件了,它會向master進(jìn)程發(fā)送信號,然后接下來的動作,就和我們直接向master進(jìn)程發(fā)送信號一樣了。
6.2、worker進(jìn)程(處理請求)
而基本的網(wǎng)絡(luò)事件,則是放在worker進(jìn)程中來處理了。多個worker進(jìn)程之間是對等的,他們同等競爭來自客戶端的請求,各進(jìn)程互相之間是獨立的。一個請求,只可能在一個worker進(jìn)程中處理,一個worker進(jìn)程不可能處理其它進(jìn)程的請求。
worker進(jìn)程的個數(shù)是可以設(shè)置的,一般我們會設(shè)置與機(jī)器cpu核數(shù)一致。每個 worker 的線程可以把一個 CPU 的性能發(fā)揮到極致,所以 worker數(shù)和服務(wù)器的 CPU 數(shù)相等是最合適的。設(shè)少了會浪費 CPU,設(shè)多了會造成 CPU 頻繁切換上下文帶來的損耗。
worker進(jìn)程之間是平等的,每個進(jìn)程,處理請求的機(jī)會也是一樣的。當(dāng)我們提供80端口的http服務(wù)時,一個連接請求過來,每個進(jìn)程都有可能處理這個連接,怎么做到的呢?
Nginx采用異步非阻塞的方式來處理網(wǎng)絡(luò)事件,類似于Libevent,具體過程如下:
1)接收請求:首先,每個worker進(jìn)程都是從master進(jìn)程fork過來,在master進(jìn)程建立好需要listen的socket(listenfd)之后,然后再fork出多個worker進(jìn)程。所有worker進(jìn)程的listenfd會在新連接到來時變得可讀,每個work進(jìn)程都可以去accept這個socket(listenfd)。當(dāng)一個client連接到來時,所有accept的work進(jìn)程都會受到通知,但只有一個進(jìn)程可以accept成功,其它的則會accept失敗。為保證只有一個進(jìn)程處理該連接,Nginx提供了一把共享鎖accept_mutex來保證同一時刻只有一個work進(jìn)程在accept連接。所有worker進(jìn)程在注冊listenfd讀事件前搶accept_mutex,搶到互斥鎖的那個進(jìn)程注冊listenfd讀事件,在讀事件里調(diào)用accept接受該連接。
2)處理請求:當(dāng)一個worker進(jìn)程在accept這個連接之后,就開始讀取請求,解析請求,處理請求,產(chǎn)生數(shù)據(jù)后,再返回給客戶端,最后才斷開連接,這樣一個完整的請求就是這樣的了。
我們可以看到,一個請求,完全由worker進(jìn)程來處理,而且只在一個worker進(jìn)程中處理。worker進(jìn)程之間是平等的,每個進(jìn)程,處理請求的機(jī)會也是一樣的。
6.3、Nginx多進(jìn)程模型的好處
首先,對于每個worker進(jìn)程來說,獨立的進(jìn)程,不需要加鎖,所以省掉了鎖帶來的開銷,同時在編程以及問題查找時,也會方便很多。
其次,采用獨立的進(jìn)程,可以讓互相之間不會影響,一個進(jìn)程退出后,其它進(jìn)程還在工作,服務(wù)不會中斷,master進(jìn)程則很快啟動新的worker進(jìn)程。當(dāng)然,worker進(jìn)程的異常退出,肯定是程序有bug了,異常退出,會導(dǎo)致當(dāng)前worker上的所有請求失敗,不過不會影響到所有請求,所以降低了風(fēng)險。
6.4、Nginx支持的并發(fā)數(shù)
單個進(jìn)程的連接數(shù)有上限,Nginx 上配置單個 Worker 進(jìn)程的最大連接數(shù):worker_connections ,上限為 nofile。Nginx 上配置 Worker 進(jìn)程的數(shù)量:worker_processes。
- Nginx 的最大連接數(shù):Nginx 的最大連接數(shù) = Worker 進(jìn)程數(shù) * 單個 Worker 進(jìn)程的最大連接數(shù)。
- Nginx 的最大并發(fā)數(shù):Nginx 作為反向代理服務(wù)器時,每個請求建立1條連接,所以此時最大的并發(fā)數(shù) = 最大連接數(shù)。Nginx 作為反向代理時,會建立 Client 的連接和后端 Web Server 的連接,需要占用 2 個連接,此時最大并發(fā)數(shù) = 最大連接數(shù) / 2。
nginx采用了異步非阻塞的方式來處理請求,nginx 是可以同時處理成千上萬個請求的,一個worker進(jìn)程可以同時處理的請求數(shù)只受限于內(nèi)存大小,而且在架構(gòu)設(shè)計上,不同的worker進(jìn)程之間處理并發(fā)請求時幾乎沒有同步鎖的限制,worker進(jìn)程通常不會進(jìn)入睡眠狀態(tài),因此,當(dāng)Nginx上的進(jìn)程數(shù)與CPU核心數(shù)相等時(最好每一個worker進(jìn)程都綁定特定的CPU核心),進(jìn)程間切換的代價是最小的。
對于Nginx來講,一個進(jìn)程只有一個主線程,那么它是怎么實現(xiàn)高并發(fā)的呢?Nginx 采用了IO多路復(fù)用的原理,通過異步非阻塞的事件處理機(jī)制,實現(xiàn)了輕量級和高并發(fā)。
簡單來說:每進(jìn)來一個request,會有一個worker進(jìn)程去處理。但不是全程的處理,處理到什么程度呢?處理到可能發(fā)生阻塞的地方,比如向上游(后端)服務(wù)器轉(zhuǎn)發(fā)request,并等待請求返回。那么,這個處理的worker不會這么傻等著,他會在發(fā)送完請求后,注冊一個事件:“如果upstream返回了,告訴我一聲,我再接著干”。于是他就休息去了。此時,如果再有request 進(jìn)來,他就可以很快再按這種方式處理。而一旦上游服務(wù)器返回了,就會觸發(fā)這個事件,worker才會來接手,這個request才會接著往下走。由于web server的工作性質(zhì)決定了每個request的大部份生命都是在網(wǎng)絡(luò)傳輸中,實際上花費在server機(jī)器上的時間片不多,這就是幾個進(jìn)程就能解決高并發(fā)的秘密所在。
為什么 Nginx 不使用多線程?
Apache: 創(chuàng)建多個進(jìn)程或線程,而每個進(jìn)程或線程都會為其分配 cpu 和內(nèi)存(線程要比進(jìn)程小的多,所以worker支持比perfork高的并發(fā)),并發(fā)過大會耗光服務(wù)器資源。
Nginx: 采用單線程來異步非阻塞處理請求(管理員可以配置Nginx主進(jìn)程的工作進(jìn)程的數(shù)量)(epoll),不會為每個請求分配cpu和內(nèi)存資源,節(jié)省了大量資源,同時也減少了大量的CPU的上下文切換。所以才使得Nginx支持更高的并發(fā)。

浙公網(wǎng)安備 33010602011771號