柚子快報激活碼778899分享:nginx
柚子快報激活碼778899分享:nginx
nginx簡介
Nginx:engine X ,2002年開發(fā),分為社區(qū)版和商業(yè)版(nginx plus ) 2019年3月11日 F5 Networks 6.7億美元的價格收購 Nginx是免費的、開源的、高性能的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è)計,較好的擴展性 高可靠性 支持熱部署:不停機更新配置文件,升級版本,更換日志文件 低內(nèi)存消耗:10000個keep-alive連接模式下的非活動連接,僅需2.5M內(nèi)存 event-driven,aio,mmap,sendfile
web服務(wù)器功能
虛擬主機(server) 支持 keep-alive 和管道連接(利用一個連接做多次請求) 訪問日志(支持基于日志緩沖提高其性能) url rewirte 路徑別名 基于IP及用戶的訪問控制 支持速率限制及并發(fā)數(shù)限制 重新配置和在線升級而無須中斷客戶的工作進程
架構(gòu)和進程
web請求處理機制 多進程方式: 服務(wù)器每接收到一個客戶端請求就有服務(wù)器的主進程生成一個子進程響應(yīng)客戶端,直 到用戶關(guān)閉連接,這樣的優(yōu)勢是處理速度快,子進程之間相互獨立,但是如果訪問過大會導致服務(wù) 器資源耗盡而無法提供請求 多線程方式: 與多進程方式類似,但是每收到一個客戶端請求會有服務(wù)進程派生出一個線程和此客 戶端進行交互,一個線程的開銷遠遠小于一個進程,因此多線程方式在很大程度減輕了web服務(wù)器 對系統(tǒng)資源的要求,但是多線程也有自己的缺點,即當多個線程位于同一個進程內(nèi)工作的時候,可 以相互訪問同樣的內(nèi)存地址空間,所以他們相互影響,一旦主進程掛掉則所有子線程都不能工作 了,IIS服務(wù)器使用了多線程的方式,需要間隔一段時間就重啟一次才能穩(wěn)定。
Nginx是多進程方式模型,是由一個Master(主進程)和Worker(工作進程)組成。
?主進程(Master process) 功能
? ? ? ? 讀取和加載配置文件:主進程在啟動時讀取并驗證Nginx的配置文件,并將其加載到內(nèi)存中。
? ? ????初始化工作進程:主進程根據(jù)配置文件中的worker_processes指令創(chuàng)建相應(yīng)數(shù)量的工作進程。
? ? ? ? 監(jiān)控工作進程:監(jiān)控工作進程的運行狀態(tài),并在工作進程異常中止時重新啟動新的工作進 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 程。
? ? ? ? 處理信號:主進程接收來自操作系統(tǒng)的信號,并根據(jù)信號的類型執(zhí)行相應(yīng)的操作,如平滑重 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?啟、平滑升級、平滑回滾、停止服務(wù)等。
? ? ? ? 管理日志文件:主進程負責管理錯誤日志和訪問日志的滾動和重命名。
? ? ? ? socket管理:建立、綁定和關(guān)閉socket的連接
工作進程(Worker process)功能
? ? ? ? 處理客戶端請求:工作進程接收客戶端的HTTP請求,并根據(jù)配置文件中的指令進行處理,如反向代理、負載均衡、靜態(tài)文件服務(wù)等。
? ? ? ? 執(zhí)行網(wǎng)絡(luò)I/O操作:工作進程使用異步非阻塞的方式處理網(wǎng)絡(luò)事件,如接受新連接、讀取和寫入數(shù)據(jù),提高了處理并發(fā)連接的能力。
? ? ? ? 資源隔離:每個工作進程在內(nèi)存和文件描述符等資源上是獨立的,這樣可以防止一個進程的崩潰影響到其他進程。
? ? ? ? 執(zhí)行配置文件中的指令:工作進程執(zhí)行主進程加載的配置文件中的指令,完成各種網(wǎng)絡(luò)服務(wù)任務(wù)。
Nginx 進程間通信
工作進程是由主進程生成的,主進程使用fork()函數(shù),在Nginx服務(wù)器啟動過程中主進程根據(jù)配置文件決 定啟動工作進程的數(shù)量,然后建立一張全局的工作表用于存放當前未退出的所有的工作進程,主進程生 成工作進程后會將新生成的工作進程加入到工作進程表中,并建立一個單向的管道并將其傳遞給工作進 程,該管道與普通的管道不同,它是由主進程指向工作進程的單向通道,包含了主進程向工作進程發(fā)出 的指令、工作進程ID、工作進程在工作進程表中的索引和必要的文件描述符等信息。
主進程與外界通過信號機制進行通信,當接收到需要處理的信號時,它通過管道向相關(guān)的工作進程發(fā)送 正確的指令,每個工作進程都有能力捕獲管道中的可讀事件,當管道中有可讀事件的時候,工作進程就 會從管道中讀取并解析指令,然后采取相應(yīng)的執(zhí)行動作,這樣就完成了主進程與工作進程的交互。
Nginx 模塊介紹
nginx 有多種模塊 ? ? ? ? 核心模塊:這些是Nginx的基礎(chǔ)模塊,提供了服務(wù)器運行所必需的核心功能,如事件處理、配置文件解析等。
? ? ? ? 標準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虛擬主機段、location段等。
? ? ? ? ngx_http_gzip_module:使用gzip方法壓縮響應(yīng),減少傳輸數(shù)據(jù)大小,提高請求返回速度。
? ? ? ? ?ngx_http_proxy_module:允許將請求轉(zhuǎn)發(fā)到其他服務(wù)器,實現(xiàn)反向代理服務(wù)器的功能。
? ? ? ? ?ngx_http_rewrite_module:使用PCRE正則表達式更改請求的URI、返回重定向或判斷選擇對應(yīng)的配置項。
? ? ? ? ngx_http_upstream_module:用于用戶分發(fā)到不同的服務(wù)器節(jié)點,支持多種后端服務(wù)器類型。
nginx高度模塊化,但其模塊早期不支持DSO機制;1.9.11 版本支持動態(tài)裝載和卸載
Nginx 源碼安裝
nginx官網(wǎng)下載地址:nginx: download
編譯需要的工具
解壓這三個模塊
安裝模塊
進入到 /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ù)的情況下,進行新模塊添加或版本升級
獲取新版本以及需要添加的組件并解壓
進入新版本文件目錄,檢查環(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
?將新配置文件復制至目錄,并檢查新配置文件
\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)郵 件擴展類型,MIME消息能包含文本、圖像、音頻、視頻以及其他應(yīng)用程序?qū)S玫臄?shù)據(jù),是設(shè)定某 種擴展名的文件用一種應(yīng)用程序來打開的方式類型,當該擴展名文件被訪問的時候,瀏覽器會自動 使用指定應(yīng)用程序來打開。多用于指定一些客戶端自定義的文件名,以及一些媒體文件打開方式。
nginx 配置文件格式說明
配置文件由指令與指令塊構(gòu)成
每條指令以;分號結(jié)尾,指令與值之間以空格符號分隔
可以將多條指令放在同一行,用分號分隔即可,但可讀性差,不推薦
指令塊以{ }大括號將多條指令組織在一起,且可以嵌套指令塊
include語句允許組合多個配置文件以提升可維護性
使用#符號添加注釋,提高可讀性
使用$符號使用變量
部分指令的參數(shù)支持正則表達式
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 {
默認的nginx.conf 配置文件格式說明.
..
}
#默認配置文件不包括下面兩個塊
#mail 協(xié)議相關(guān)配置段
mail {
...
}
#stream 服務(wù)器相關(guān)配置段
stream {
...
}
默認的nginx.conf 配置文件格式說明
#全局配置端,對全局生效,主要設(shè)置nginx的啟動用戶/組,啟動的工作進程數(shù)量,工作模式,Nginx的PID路
徑,日志路徑等。
user nginx nginx;
worker_processes 1; #啟動工作進程數(shù)數(shù)量
events { #events #設(shè)置快,主要影響nginx服務(wù)器與用戶的網(wǎng)絡(luò)連接,比如是否允許同時接受多個網(wǎng)絡(luò)連接,使用哪種事件驅(qū)動模型 #處理請求,每個工作進程可以同時支持的最大連接數(shù),是否開啟對多工作進程下的網(wǎng)絡(luò)連接進行序列化等。
worker_connections 1024; #設(shè)置單個nginx工作進程可以接受的最大并發(fā),作為web服務(wù)器的時候最大并發(fā)數(shù)為 #worker_connections *
worker_processes,作為反向代理的時候為
#(worker_connections * worker_processes)/2
}
http {
#http塊是Nginx服務(wù)器配置中的重要部分,緩存、代理和日志格
式定義等絕大多數(shù)功能和第三方模塊都 #可以在這設(shè)置,http塊可
以包含多個server塊,而一個server塊中又可以包含多個location塊,
#server塊可以配置文件引入、MIME-Type定義、日志自定義、是
否啟用sendfile、連接超時時間和 #單個鏈接的請求上限等。
include mime.types;
default_type application/octet-stream;
sendfile on; #作為web服務(wù)器的時候打開sendfile加快靜態(tài)文件傳輸,指定是否使用
#sendfile系統(tǒng)調(diào)用來傳輸文件
#sendfile系統(tǒng)調(diào)用在兩個文件描述符之間直接傳遞數(shù)據(jù)(完全在內(nèi)核中操作)
#從而避免了數(shù)據(jù)在內(nèi)核緩沖區(qū)和用戶緩沖區(qū)之間的拷貝,操作效率很高,被稱之為零拷貝,
#硬盤 >> kernel buffer (快速拷貝到kernelsocketbuffer) >>協(xié)議棧。
keepalive_timeout 65; #長連接超時時間,單位是秒
server {
#設(shè)置一個虛擬機主機,可以包含自己的全局快,同時也可以包含多個location模塊
#比如本虛擬機監(jiān)聽的端口、本虛擬機的名稱和IP配置,多個server 可以使用一個端口比如都使用
#80端口提供web服務(wù)
listen 80; #配置server監(jiān)聽的端口
server_name localhost; #本server的名稱,當訪問此名稱的時候nginx會調(diào)用當前serevr內(nèi)部的配置進程匹配。
location / { #location其實是server的一個指令,為nginx服務(wù)器提供比較多而且靈活的指令
#都是在location中體現(xiàn)的,主要是基于nginx接受到的請求字符串
#對用戶請求的UIL進行匹配,并對特定的指令進行處理
#包括地址重定向、數(shù)據(jù)緩存和應(yīng)答控制等功能都是在這部分實現(xiàn)
#另外很多第三方模塊的配置也是在location模塊中配置。
root html; #相當于默認頁面的目錄名稱,默認是安裝目錄的相對路徑,可以使用絕對路徑配置。
index index.html index.htm; #默認的頁面文件名稱
}
error_page 500 502 503 504 /50x.html; #錯誤頁面的文件名稱
location = /50x.html { #location處理對應(yīng)的不同錯誤碼的頁面定義到/50x.html
#這個跟對應(yīng)其server中定義的目錄下。
root html; #定義默認頁面所在的目錄
}
}
#和郵件相關(guān)的配置
#mail {
# ...
# } mail 協(xié)議相關(guān)配置段
#tcp代理配置,1.9版本以上支持
#stream {
# ...
# } stream 服務(wù)器相關(guān)配置段
#導入其他路徑的配置文件
#include /apps/nginx/conf.d/*.conf
}
全局配置
Main 全局配置段常見的配置指令分類 正常運行必備的配置 優(yōu)化性能相關(guān)的配置 用于調(diào)試及定位問題相關(guān)的配置 事件驅(qū)動相關(guān)的配置
全局配置說明:
user nginx nginx; #啟動Nginx工作進程的用戶和組
worker_processes [number | auto]; #啟動Nginx工作進程的數(shù)量,一般設(shè)為和CPU核心數(shù)相同
worker_cpu_affinity 00000001 00000010 00000100 00001000 | auto ;
#將Nginx工作進程綁定到指定的CPU核心,默認Nginx是不進行進程綁定的,綁定并不是意味著當前ginx進程獨占以一核心CPU,但是可以保證此進程不運行在其他核心上,這就極大減少了nginx的工作進程在不同的cpu核心上的來回跳轉(zhuǎn),減少了CPU對進程的資源分配與回收以及內(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
#錯誤日志記錄配置,語法: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; #工作進程優(yōu)先級,-20~20(19)
worker_rlimit_nofile 65536; #所有worker進程能打開的文件數(shù)量上限,
#包括:Nginx的所有連接(例如與代理服務(wù)器的連接等)
#而不僅僅是與客戶端的連接
#另一個考慮因素是實際的并發(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; #前臺運行Nginx服務(wù)用于測試、docker等環(huán)境。
master_process off|on; #是否開啟Nginx的master-worker工作模式,僅用于開發(fā)調(diào)試場景,默認為
on
events {
示例: 實現(xiàn) nginx 的高并發(fā)配置
worker_connections 65535; #設(shè)置單個工作進程的最大并發(fā)連接數(shù)
use epoll; #使用epoll事件驅(qū)動,
#Nginx支持眾多的事件驅(qū)動,
#比如:select、poll、epoll,只能設(shè)置在events模塊中
設(shè)置
accept_mutex on; #on為同一時刻一個請求輪流由work進程處理,
#而防止被同時喚醒所有worker
#避免多個睡眠進程被喚醒的設(shè)置,默認為off
#新請求會喚醒所有worker進程,此過程也稱為"驚群"
#因此nginx剛安裝完以后要進行適當?shù)膬?yōu)化。建議設(shè)置為on
multi_accept on; #on時Nginx服務(wù)器的每個工作進程可以同時接受多個新的網(wǎng)
絡(luò)連接
#此指令默認為off,
#即默認為一個工作進程只能一次接受一個新的網(wǎng)絡(luò)連接
#打開后幾個同接受多個。建議設(shè)置為on
}
實現(xiàn) nginx 的高并發(fā)配置
[root@Nginx ~]# ulimit -n 102400
[root@Nginx ~]# ab -c 5000 -n 10000 http://10.0.0.8/
#默認配置不支持高并發(fā),會出現(xiàn)以下錯誤日志
[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)報文中將指定的文件擴展名映射至MIME對應(yīng)的類型
include /etc/nginx/mime.types;
default_type application/octet-stream; #除mime.types中的類型外
#指定其它文件的默認MIME類型,瀏覽
器一般會提示下載
types {
text/html html;
image/gif gif;
image/jpeg jpg;
}
柚子快報激活碼778899分享:nginx
參考文章
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。