柚子快報(bào)激活碼778899分享:nginx
柚子快報(bào)激活碼778899分享:nginx
nginx簡介
Nginx:engine X ,2002年開發(fā),分為社區(qū)版和商業(yè)版(nginx plus ) 2019年3月11日 F5 Networks 6.7億美元的價(jià)格收購 Nginx是免費(fèi)的、開源的、高性能的HTTP和反向代理服務(wù)器、郵件代理服務(wù)器、以及TCP/UDP代理服務(wù)器
功能介紹
靜態(tài)的web資源服務(wù)器html,圖片,js,css,txt等靜態(tài)資源 http/https協(xié)議的反向代理 結(jié)合FastCGI/uWSGI/SCGI等協(xié)議反向代理動態(tài)資源請求 tcp/udp協(xié)議的請求轉(zhuǎn)發(fā)(反向代理) imap4/pop3協(xié)議的反向代理
特性
模塊化設(shè)計(jì),較好的擴(kuò)展性 高可靠性 支持熱部署:不停機(jī)更新配置文件,升級版本,更換日志文件 低內(nèi)存消耗:10000個(gè)keep-alive連接模式下的非活動連接,僅需2.5M內(nèi)存 event-driven,aio,mmap,sendfile
web服務(wù)器功能
虛擬主機(jī)(server) 支持 keep-alive 和管道連接(利用一個(gè)連接做多次請求) 訪問日志(支持基于日志緩沖提高其性能) url rewirte 路徑別名 基于IP及用戶的訪問控制 支持速率限制及并發(fā)數(shù)限制 重新配置和在線升級而無須中斷客戶的工作進(jìn)程
架構(gòu)和進(jìn)程
web請求處理機(jī)制 多進(jìn)程方式: 服務(wù)器每接收到一個(gè)客戶端請求就有服務(wù)器的主進(jìn)程生成一個(gè)子進(jìn)程響應(yīng)客戶端,直 到用戶關(guān)閉連接,這樣的優(yōu)勢是處理速度快,子進(jìn)程之間相互獨(dú)立,但是如果訪問過大會導(dǎo)致服務(wù) 器資源耗盡而無法提供請求 多線程方式: 與多進(jìn)程方式類似,但是每收到一個(gè)客戶端請求會有服務(wù)進(jìn)程派生出一個(gè)線程和此客 戶端進(jìn)行交互,一個(gè)線程的開銷遠(yuǎn)遠(yuǎn)小于一個(gè)進(jìn)程,因此多線程方式在很大程度減輕了web服務(wù)器 對系統(tǒng)資源的要求,但是多線程也有自己的缺點(diǎn),即當(dāng)多個(gè)線程位于同一個(gè)進(jìn)程內(nèi)工作的時(shí)候,可 以相互訪問同樣的內(nèi)存地址空間,所以他們相互影響,一旦主進(jìn)程掛掉則所有子線程都不能工作 了,IIS服務(wù)器使用了多線程的方式,需要間隔一段時(shí)間就重啟一次才能穩(wěn)定。
Nginx是多進(jìn)程方式模型,是由一個(gè)Master(主進(jìn)程)和Worker(工作進(jìn)程)組成。
?主進(jìn)程(Master process) 功能
? ? ? ? 讀取和加載配置文件:主進(jìn)程在啟動時(shí)讀取并驗(yàn)證Nginx的配置文件,并將其加載到內(nèi)存中。
? ? ????初始化工作進(jìn)程:主進(jìn)程根據(jù)配置文件中的worker_processes指令創(chuàng)建相應(yīng)數(shù)量的工作進(jìn)程。
? ? ? ? 監(jiān)控工作進(jìn)程:監(jiān)控工作進(jìn)程的運(yùn)行狀態(tài),并在工作進(jìn)程異常中止時(shí)重新啟動新的工作進(jìn) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 程。
? ? ? ? 處理信號:主進(jìn)程接收來自操作系統(tǒng)的信號,并根據(jù)信號的類型執(zhí)行相應(yīng)的操作,如平滑重 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?啟、平滑升級、平滑回滾、停止服務(wù)等。
? ? ? ? 管理日志文件:主進(jìn)程負(fù)責(zé)管理錯(cuò)誤日志和訪問日志的滾動和重命名。
? ? ? ? socket管理:建立、綁定和關(guān)閉socket的連接
工作進(jìn)程(Worker process)功能
? ? ? ? 處理客戶端請求:工作進(jìn)程接收客戶端的HTTP請求,并根據(jù)配置文件中的指令進(jìn)行處理,如反向代理、負(fù)載均衡、靜態(tài)文件服務(wù)等。
? ? ? ? 執(zhí)行網(wǎng)絡(luò)I/O操作:工作進(jìn)程使用異步非阻塞的方式處理網(wǎng)絡(luò)事件,如接受新連接、讀取和寫入數(shù)據(jù),提高了處理并發(fā)連接的能力。
? ? ? ? 資源隔離:每個(gè)工作進(jìn)程在內(nèi)存和文件描述符等資源上是獨(dú)立的,這樣可以防止一個(gè)進(jìn)程的崩潰影響到其他進(jìn)程。
? ? ? ? 執(zhí)行配置文件中的指令:工作進(jìn)程執(zhí)行主進(jìn)程加載的配置文件中的指令,完成各種網(wǎng)絡(luò)服務(wù)任務(wù)。
Nginx 進(jìn)程間通信
工作進(jìn)程是由主進(jìn)程生成的,主進(jìn)程使用fork()函數(shù),在Nginx服務(wù)器啟動過程中主進(jìn)程根據(jù)配置文件決 定啟動工作進(jìn)程的數(shù)量,然后建立一張全局的工作表用于存放當(dāng)前未退出的所有的工作進(jìn)程,主進(jìn)程生 成工作進(jìn)程后會將新生成的工作進(jìn)程加入到工作進(jìn)程表中,并建立一個(gè)單向的管道并將其傳遞給工作進(jìn) 程,該管道與普通的管道不同,它是由主進(jìn)程指向工作進(jìn)程的單向通道,包含了主進(jìn)程向工作進(jìn)程發(fā)出 的指令、工作進(jìn)程ID、工作進(jìn)程在工作進(jìn)程表中的索引和必要的文件描述符等信息。
主進(jìn)程與外界通過信號機(jī)制進(jìn)行通信,當(dāng)接收到需要處理的信號時(shí),它通過管道向相關(guān)的工作進(jìn)程發(fā)送 正確的指令,每個(gè)工作進(jìn)程都有能力捕獲管道中的可讀事件,當(dāng)管道中有可讀事件的時(shí)候,工作進(jìn)程就 會從管道中讀取并解析指令,然后采取相應(yīng)的執(zhí)行動作,這樣就完成了主進(jìn)程與工作進(jìn)程的交互。
Nginx 模塊介紹
nginx 有多種模塊 ? ? ? ? 核心模塊:這些是Nginx的基礎(chǔ)模塊,提供了服務(wù)器運(yùn)行所必需的核心功能,如事件處理、配置文件解析等。
? ? ? ? 標(biāo)準(zhǔn)HTTP模塊:這些模塊提供了HTTP協(xié)議相關(guān)的功能,如處理HTTP請求和響應(yīng)、設(shè)置HTTP頭信息等。
? ? ? ? 可選HTTP模塊:這些模塊提供了額外的HTTP功能,如URL重寫、地理位置信息處理等。
? ? ? ? 郵件服務(wù)模塊:這些模塊支持郵件服務(wù),如SMTP、IMAP和POP3。
? ? ? ? 第三方模塊:由社區(qū)或其他組織開發(fā),用于增加Nginx的特定功能,如JSON支持、Lua腳本支持等。
? ? ? ? 常見模塊及用途
? ? ? ? ngx_http_core_module:提供HTTP協(xié)議的支持,包括配置HTTP段、server虛擬主機(jī)段、location段等。
? ? ? ? ngx_http_gzip_module:使用gzip方法壓縮響應(yīng),減少傳輸數(shù)據(jù)大小,提高請求返回速度。
? ? ? ? ?ngx_http_proxy_module:允許將請求轉(zhuǎn)發(fā)到其他服務(wù)器,實(shí)現(xiàn)反向代理服務(wù)器的功能。
? ? ? ? ?ngx_http_rewrite_module:使用PCRE正則表達(dá)式更改請求的URI、返回重定向或判斷選擇對應(yīng)的配置項(xiàng)。
? ? ? ? ngx_http_upstream_module:用于用戶分發(fā)到不同的服務(wù)器節(jié)點(diǎn),支持多種后端服務(wù)器類型。
nginx高度模塊化,但其模塊早期不支持DSO機(jī)制;1.9.11 版本支持動態(tài)裝載和卸載
Nginx 源碼安裝
nginx官網(wǎng)下載地址:nginx: download
編譯需要的工具
解壓這三個(gè)模塊
安裝模塊
進(jìn)入到 /root/nginx-1.26.1 目錄中輸入命令
[root@nginx ~]# cd /root/nginx-1.26.1
?[root@php nginx-1.26.1]# ./configure --prefix=/usr/local/nginx \
?--add-module=/root/echo-nginx-module-0.63 \
?--add-module=/root/memc-nginx-module-0.20 \
?--add-module=/root/srcache-nginx-module-0.33 \
?--user=nginx \
?--group=nginx \
?--with-http_v2_module \
?--with-http_realip_module \
?--with-http_stub_status_module \
?--with-http_gzip_static_module \
?--with-stream --with-stream_ssl_module \
?--with-stream_realip_module \
?--with-pcre
?關(guān)閉debug模式,減小文件體積
vim auto/cc/gcc
編譯安裝
?[root@nginx ~]# cd /root/nginx-1.26.1
?[root@nginx nginx-1.26.1]# make && make install
nginx配置
#啟動nginx
?[root@nginx nginx-1.26.1]# /usr/local/nginx/sbin/nginx
?#加入環(huán)境變量
?[root@nginx nginx-1.26.1]# vim ~/.bash_profile
? ?1 # .bash_profile
? ?2
? ?3 # Get the aliases and functions
? ?4 if [ -f ~/.bashrc ]; then
? ?5 ? . ~/.bashrc
? ?6 fi
? ?7
? ?8 # User specific environment and startup programs
? ?9 export PATH=$PATH:/usr/local/nginx/sbin
?[root@nginx nginx-1.26.1]# source ~/.bash_profile
?[root@nginx nginx-1.26.1]# nginx -V
?nginx version: nginx/1.26.1
?built by gcc 11.3.1 20220421 (Red Hat 11.3.1-2) (GCC)
?built with OpenSSL 3.0.1 14 Dec 2021
?TLS SNI support enabled
?configure arguments: --prefix=/usr/local/nginx --add-module=/root/echo-nginx-module-0.63 --add-module=/root/memc-nginx-module-0.20 --add-module=/root/srcache-nginx-module-0.33 --user=nginx --group=nginx --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-stream --with-stream_ssl_module --with-stream_realip_module --with-pcre
?[root@nginx nginx-1.26.1]# nginx -t
?nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
?nginx: configuration file /etc/nginx/nginx.conf test is successful
設(shè)置控制文件
[root@nginx ~]# vim /lib/systemd/system/nginx.service
[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
[root@Nginx ~]# systemctl daemon-reload
[root@Nginx ~]# systemctl start nginx
添加可執(zhí)行權(quán)限
chmod +x /lib/systemd/system/nginx.service
平滑升級和回滾
?平滑升級
在不停止服務(wù)的情況下,進(jìn)行新模塊添加或版本升級
獲取新版本以及需要添加的組件并解壓
進(jìn)入新版本文件目錄,檢查環(huán)境變量
./configure --prefix=/usr/local/nginx \
> --user=nginx \
> --group=nginx \
> --add-module=/root/echo-nginx-module-0.63 \
> --with-http_ssl_module \
> --with-http_v2_module \
> --with-http_realip_module \
> --with-http_gzip_static_module \
> --with-http_stub_status_module \
> --with-pcre \
> --with-stream \
> --with-stream_ssl_module \
> --with-stream_realip_module
?編譯文件,不安裝
[root@Nginx nginx-1.26.2]# make
?備份舊配置文件
cd /usr/local/nginx/sbin/
mv nginx nginx.bak_24
?將新配置文件復(fù)制至目錄,并檢查新配置文件
\cp -f /root/nginx-1.26.2/objs/nginx /usr/local/nginx/sbin/
nginx -t
更新nginx
[root@Nginx sbin]# nginx -v
nginx version: nginx/1.24.0
[root@Nginx sbin]# ps aux | grep nginx
root 20323 0.0 0.0 8672 820 ? Ss 14:50 0:00 nginx: master process nginx
nginx 20324 0.0 0.2 9436 3364 ? S 14:50 0:00 nginx: worker process
root 20340 0.0 0.1 22108 2428 pts/2 S+ 14:51 0:00 grep --color=auto nginx
[root@Nginx sbin]# kill -USR2 20323
[root@Nginx sbin]# ps aux | grep nginx
root 20323 0.0 0.1 8672 2512 ? Ss 14:50 0:00 nginx: master process nginx
nginx 20324 0.0 0.2 9436 3364 ? S 14:50 0:00 nginx: worker process
root 20343 0.0 0.4 8716 5968 ? S 14:51 0:00 nginx: master process nginx
nginx 20344 0.0 0.2 9476 3376 ? S 14:51 0:00 nginx: worker process
root 20346 0.0 0.1 22108 2316 pts/2 S+ 14:51 0:00 grep --color=auto nginx
[root@Nginx sbin]# nginx -v
nginx version: nginx/1.26.2
回收舊版本
[root@Nginx sbin]# ps aux | grep nginx
root 20323 0.0 0.1 8672 2512 ? Ss 14:50 0:00 nginx: master process nginx
nginx 20324 0.0 0.2 9436 3364 ? S 14:50 0:00 nginx: worker process
root 20343 0.0 0.4 8716 5968 ? S 14:51 0:00 nginx: master process nginx
nginx 20344 0.0 0.2 9476 3376 ? S 14:51 0:00 nginx: worker process
root 20571 0.0 0.1 22108 2240 pts/2 S+ 18:53 0:00 grep --color=auto nginx
[root@Nginx sbin]# kill -WINCH 20323
[root@Nginx sbin]# ps aux | grep nginx
root 20323 0.0 0.1 8672 2512 ? Ss 14:50 0:00 nginx: master process nginx
root 20343 0.0 0.4 8716 5968 ? S 14:51 0:00 nginx: master process nginx
nginx 20344 0.0 0.2 9476 3376 ? S 14:51 0:00 nginx: worker process
root 20573 0.0 0.1 22108 2336 pts/2 S+ 18:54 0:00 grep --color=auto nginx
平滑回滾
? ? ? ? 如果升級的新版本發(fā)現(xiàn)問題,可以回滾至舊版本
? ? ? ? 替換配置文件
[root@Nginx sbin]# cp nginx nginx.26
[root@Nginx sbin]# ls
nginx nginx.24 nginx.26
[root@Nginx sbin]# mv nginx.24 nginx
mv: overwrite 'nginx'? y
[root@Nginx sbin]# kill -HUP 48732
[root@Nginx sbin]# ps aux | grep nginx
root 48732 0.0 0.1 9868 2436 ? Ss 14:17 0:00 nginx: master
process /usr/local/nginx/sbin/nginx
root 52075 0.0 0.3 9876 6528 ? S 15:41 0:00 nginx: master
process /usr/local/nginx/sbin/nginx
nobody 52076 0.0 0.2 14208 5124 ? S 15:41 0:00 nginx: worker
process
nobody 52130 0.0 0.2 14200 4868 ? S 16:30 0:00 nginx: worker
process
[root@Nginx sbin]# kill -WINCH 52075
[root@Nginx sbin]# ps aux | grep nginx
root 48732 0.0 0.1 9868 2436 ? Ss 14:17 0:00 nginx: master
process /usr/local/nginx/sbin/nginx
root 52075 0.0 0.3 9876 6528 ? S 15:41 0:00 nginx: master
process /usr/local/nginx/sbin/nginx
nobody 52130 0.0 0.2 14200 4868 ? S 16:30 0:00 nginx: worker
process
root 52137 0.0 0.1 221664 2176 pts/0 S+ 16:31 0:00 grep --
color=auto nginx
[root@Nginx sbin]# curl -I localhost
HTTP/1.1 200 OK
Server: nginx/1.24.0 ##版本回滾完成
Date: Thu, 18 Jul 2024 08:31:51 GMT
Content-Type: text/html
Content-Length: 615
Last-Modified: Thu, 18 Jul 2024 03:41:13 GMT
Connection: keep-alive
ETag: "66988ed9-267"
Accept-Ranges: bytes
Nginx 核心配置詳解
nginx 官方幫助文檔:http://nginx.org/en/docs/
Nginx的配置文件的組成部分:
主配置文件:nginx.conf 子配置文件: include conf.d/*.conf fastcgi, uwsgi,scgi 等協(xié)議相關(guān)的配置文件 mime.types:支持的mime類型,MIME(Multipurpose Internet Mail Extensions)多用途互聯(lián)網(wǎng)郵 件擴(kuò)展類型,MIME消息能包含文本、圖像、音頻、視頻以及其他應(yīng)用程序?qū)S玫臄?shù)據(jù),是設(shè)定某 種擴(kuò)展名的文件用一種應(yīng)用程序來打開的方式類型,當(dāng)該擴(kuò)展名文件被訪問的時(shí)候,瀏覽器會自動 使用指定應(yīng)用程序來打開。多用于指定一些客戶端自定義的文件名,以及一些媒體文件打開方式。
nginx 配置文件格式說明
配置文件由指令與指令塊構(gòu)成
每條指令以;分號結(jié)尾,指令與值之間以空格符號分隔
可以將多條指令放在同一行,用分號分隔即可,但可讀性差,不推薦
指令塊以{ }大括號將多條指令組織在一起,且可以嵌套指令塊
include語句允許組合多個(gè)配置文件以提升可維護(hù)性
使用#符號添加注釋,提高可讀性
使用$符號使用變量
部分指令的參數(shù)支持正則表達(dá)式
Nginx 主配置文件的配置指令方式:
directive value [value2 ...];
注意
(1) 指令必須以分號結(jié)尾
(2) 支持使用配置變量
內(nèi)建變量:由Nginx模塊引入,可直接引用
自定義變量:由用戶使用set命令定義,格式: set variable_name value;
引用變量:$variable_name
主配置文件結(jié)構(gòu):四部分
main block:主配置段,即全局配置段,對http,mail都有效
#事件驅(qū)動相關(guān)的配置
event {
...
}
#http/https 協(xié)議相關(guān)配置段
http {
默認(rèn)的nginx.conf 配置文件格式說明.
..
}
#默認(rèn)配置文件不包括下面兩個(gè)塊
#mail 協(xié)議相關(guān)配置段
mail {
...
}
#stream 服務(wù)器相關(guān)配置段
stream {
...
}
默認(rèn)的nginx.conf 配置文件格式說明
#全局配置端,對全局生效,主要設(shè)置nginx的啟動用戶/組,啟動的工作進(jìn)程數(shù)量,工作模式,Nginx的PID路
徑,日志路徑等。
user nginx nginx;
worker_processes 1; #啟動工作進(jìn)程數(shù)數(shù)量
events { #events #設(shè)置快,主要影響nginx服務(wù)器與用戶的網(wǎng)絡(luò)連接,比如是否允許同時(shí)接受多個(gè)網(wǎng)絡(luò)連接,使用哪種事件驅(qū)動模型 #處理請求,每個(gè)工作進(jìn)程可以同時(shí)支持的最大連接數(shù),是否開啟對多工作進(jìn)程下的網(wǎng)絡(luò)連接進(jìn)行序列化等。
worker_connections 1024; #設(shè)置單個(gè)nginx工作進(jìn)程可以接受的最大并發(fā),作為web服務(wù)器的時(shí)候最大并發(fā)數(shù)為 #worker_connections *
worker_processes,作為反向代理的時(shí)候?yàn)?/p>
#(worker_connections * worker_processes)/2
}
http {
#http塊是Nginx服務(wù)器配置中的重要部分,緩存、代理和日志格
式定義等絕大多數(shù)功能和第三方模塊都 #可以在這設(shè)置,http塊可
以包含多個(gè)server塊,而一個(gè)server塊中又可以包含多個(gè)location塊,
#server塊可以配置文件引入、MIME-Type定義、日志自定義、是
否啟用sendfile、連接超時(shí)時(shí)間和 #單個(gè)鏈接的請求上限等。
include mime.types;
default_type application/octet-stream;
sendfile on; #作為web服務(wù)器的時(shí)候打開sendfile加快靜態(tài)文件傳輸,指定是否使用
#sendfile系統(tǒng)調(diào)用來傳輸文件
#sendfile系統(tǒng)調(diào)用在兩個(gè)文件描述符之間直接傳遞數(shù)據(jù)(完全在內(nèi)核中操作)
#從而避免了數(shù)據(jù)在內(nèi)核緩沖區(qū)和用戶緩沖區(qū)之間的拷貝,操作效率很高,被稱之為零拷貝,
#硬盤 >> kernel buffer (快速拷貝到kernelsocketbuffer) >>協(xié)議棧。
keepalive_timeout 65; #長連接超時(shí)時(shí)間,單位是秒
server {
#設(shè)置一個(gè)虛擬機(jī)主機(jī),可以包含自己的全局快,同時(shí)也可以包含多個(gè)location模塊
#比如本虛擬機(jī)監(jiān)聽的端口、本虛擬機(jī)的名稱和IP配置,多個(gè)server 可以使用一個(gè)端口比如都使用
#80端口提供web服務(wù)
listen 80; #配置server監(jiān)聽的端口
server_name localhost; #本server的名稱,當(dāng)訪問此名稱的時(shí)候nginx會調(diào)用當(dāng)前serevr內(nèi)部的配置進(jìn)程匹配。
location / { #location其實(shí)是server的一個(gè)指令,為nginx服務(wù)器提供比較多而且靈活的指令
#都是在location中體現(xiàn)的,主要是基于nginx接受到的請求字符串
#對用戶請求的UIL進(jìn)行匹配,并對特定的指令進(jìn)行處理
#包括地址重定向、數(shù)據(jù)緩存和應(yīng)答控制等功能都是在這部分實(shí)現(xiàn)
#另外很多第三方模塊的配置也是在location模塊中配置。
root html; #相當(dāng)于默認(rèn)頁面的目錄名稱,默認(rèn)是安裝目錄的相對路徑,可以使用絕對路徑配置。
index index.html index.htm; #默認(rèn)的頁面文件名稱
}
error_page 500 502 503 504 /50x.html; #錯(cuò)誤頁面的文件名稱
location = /50x.html { #location處理對應(yīng)的不同錯(cuò)誤碼的頁面定義到/50x.html
#這個(gè)跟對應(yīng)其server中定義的目錄下。
root html; #定義默認(rèn)頁面所在的目錄
}
}
#和郵件相關(guān)的配置
#mail {
# ...
# } mail 協(xié)議相關(guān)配置段
#tcp代理配置,1.9版本以上支持
#stream {
# ...
# } stream 服務(wù)器相關(guān)配置段
#導(dǎo)入其他路徑的配置文件
#include /apps/nginx/conf.d/*.conf
}
全局配置
Main 全局配置段常見的配置指令分類 正常運(yùn)行必備的配置 優(yōu)化性能相關(guān)的配置 用于調(diào)試及定位問題相關(guān)的配置 事件驅(qū)動相關(guān)的配置
全局配置說明:
user nginx nginx; #啟動Nginx工作進(jìn)程的用戶和組
worker_processes [number | auto]; #啟動Nginx工作進(jìn)程的數(shù)量,一般設(shè)為和CPU核心數(shù)相同
worker_cpu_affinity 00000001 00000010 00000100 00001000 | auto ;
#將Nginx工作進(jìn)程綁定到指定的CPU核心,默認(rèn)Nginx是不進(jìn)行進(jìn)程綁定的,綁定并不是意味著當(dāng)前ginx進(jìn)程獨(dú)占以一核心CPU,但是可以保證此進(jìn)程不運(yùn)行在其他核心上,這就極大減少了nginx的工作進(jìn)程在不同的cpu核心上的來回跳轉(zhuǎn),減少了CPU對進(jìn)程的資源分配與回收以及內(nèi)存管理等,因此可以有效的提升nginx服務(wù)器的性能。
CPU MASK: 00000001:0號CPU
00000010:1號CPU
10000000:7號CPU
#示例
worker_cpu_affinity 0001 0010 0100 1000;第0號---第3號CPU
worker_cpu_affinity 0101 1010;
#示例
worker_processes 4;
worker_cpu_affinity 00000010 00001000 00100000 10000000;
[root@centos8 ~]# ps axo pid,cmd,psr | grep nginx
31093 nginx: master process /apps 1
34474 nginx: worker process 1
34475 nginx: worker process 3
34476 nginx: worker process 5
34477 nginx: worker process 7
#錯(cuò)誤日志記錄配置,語法:error_log file [debug | info | notice | warn | error | crit
| alert | emerg]
#error_log logs/error.log;
#error_log logs/error.log notice;
error_log /usr/local/nginx/logs/error.log error;
#pid文件保存路徑
pid /usr/local/nginx/logs/nginx.pid;
worker_priority 0; #工作進(jìn)程優(yōu)先級,-20~20(19)
worker_rlimit_nofile 65536; #所有worker進(jìn)程能打開的文件數(shù)量上限,
#包括:Nginx的所有連接(例如與代理服務(wù)器的連接等)
#而不僅僅是與客戶端的連接
#另一個(gè)考慮因素是實(shí)際的并發(fā)連接數(shù)不能超過系統(tǒng)級別的最大打開文件
數(shù)的限制
#最好與ulimit -n 或者limits.conf的值保持一致,
#修改pam限制
[root@Nginx ~]# sudo -u nginx ulimit -n
1024
[root@Nginx ~]# vim /etc/security/limits.conf
* - nofile 100000
[root@Nginx ~]# sudo -u nginx ulimit -n
100000
daemon off; #前臺運(yùn)行Nginx服務(wù)用于測試、docker等環(huán)境。
master_process off|on; #是否開啟Nginx的master-worker工作模式,僅用于開發(fā)調(diào)試場景,默認(rèn)為
on
events {
示例: 實(shí)現(xiàn) nginx 的高并發(fā)配置
worker_connections 65535; #設(shè)置單個(gè)工作進(jìn)程的最大并發(fā)連接數(shù)
use epoll; #使用epoll事件驅(qū)動,
#Nginx支持眾多的事件驅(qū)動,
#比如:select、poll、epoll,只能設(shè)置在events模塊中
設(shè)置
accept_mutex on; #on為同一時(shí)刻一個(gè)請求輪流由work進(jìn)程處理,
#而防止被同時(shí)喚醒所有worker
#避免多個(gè)睡眠進(jìn)程被喚醒的設(shè)置,默認(rèn)為off
#新請求會喚醒所有worker進(jìn)程,此過程也稱為"驚群"
#因此nginx剛安裝完以后要進(jìn)行適當(dāng)?shù)膬?yōu)化。建議設(shè)置為on
multi_accept on; #on時(shí)Nginx服務(wù)器的每個(gè)工作進(jìn)程可以同時(shí)接受多個(gè)新的網(wǎng)
絡(luò)連接
#此指令默認(rèn)為off,
#即默認(rèn)為一個(gè)工作進(jìn)程只能一次接受一個(gè)新的網(wǎng)絡(luò)連接
#打開后幾個(gè)同接受多個(gè)。建議設(shè)置為on
}
實(shí)現(xiàn) nginx 的高并發(fā)配置
[root@Nginx ~]# ulimit -n 102400
[root@Nginx ~]# ab -c 5000 -n 10000 http://10.0.0.8/
#默認(rèn)配置不支持高并發(fā),會出現(xiàn)以下錯(cuò)誤日志
[root@Nginx ~]# tail /apps/nginx/logs/error.log
2020/09/24 21:19:33 [crit] 41006#0: *1105860 open() "/apps/nginx/html/50x.html"
failed (24: Too many open files), client: 10.0.0.7, server: localhost, request:
"GET / HTTP/1.0", host: "10.0.0.8"
2020/09/24 21:19:33 [crit] 41006#0: accept4() failed (24: Too many open files)
2020/09/24 21:19:33 [crit] 41006#0: *1114177 open()
"/apps/nginx/html/index.html" failed (24: Too many open files), client: 10.0.0.7,
server: localhost, request: "GET / HTTP/1.0", host: "10.0.0.8"
#修改配置
[root@Nginx ~]# vim /etc/security/limits.conf
* - nproc 100000
[root@Nginx ~]# vim /apps/nginx/conf/nginx.conf
worker_rlimit_nofile 100000;
[root@Nginx ~]# systemctl restart nginx
http 配置塊
#在響應(yīng)報(bào)文中將指定的文件擴(kuò)展名映射至MIME對應(yīng)的類型
include /etc/nginx/mime.types;
default_type application/octet-stream; #除mime.types中的類型外
#指定其它文件的默認(rèn)MIME類型,瀏覽
器一般會提示下載
types {
text/html html;
image/gif gif;
image/jpeg jpg;
}
柚子快報(bào)激活碼778899分享:nginx
參考文章
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。