前言
- 未來會(huì)圍繞nginx系列寫幾篇文章种玛。包含自己理解的藐鹤,用到的,學(xué)到的赂韵,希望和大家一起互相激勵(lì)娱节,發(fā)現(xiàn)、解決問題右锨,共同進(jìn)步括堤。
目錄
- nginx簡(jiǎn)介
- nginx特點(diǎn)和應(yīng)用場(chǎng)景
- nginx配置結(jié)構(gòu)
nginx簡(jiǎn)介
(engine x) 是一個(gè)高性能的HTTP和反向代理服務(wù)碌秸,也是一個(gè)IMAP/POP3/SMTP服務(wù)绍移。Nginx是由伊戈?duì)枴べ愃饕驗(yàn)槎砹_斯訪問量第二的Rambler.ru站點(diǎn)開發(fā)的,第一個(gè)公開版本0.1.0發(fā)布于2004年10月4日讥电。
國(guó)內(nèi)分支Tengine
nginx特點(diǎn)和應(yīng)用場(chǎng)景
特點(diǎn)
- 內(nèi)存消耗低
在一般的情況下蹂窖,10000個(gè)非活躍的HTTP Keep-Alive 連接在Nginx中僅消耗2.5M的內(nèi)存,這也是Nginx支持高并發(fā)連接的基礎(chǔ)恩敌。- 高并發(fā)
官方測(cè)試nginx能夠支撐5萬并發(fā)連接瞬测,實(shí)際生產(chǎn)環(huán)境中可以支撐2~4萬并發(fā)連接數(shù)。主要是因?yàn)閚ginx使用了最新的epoll(Linux2.6內(nèi)核)kqueue(freeBSD)網(wǎng)路I/O模型纠炮。- 熱部署
nginx采用master管理進(jìn)程與worker工作進(jìn)程的分離設(shè)計(jì)月趟,使得nginx具有熱部署的功能,那么在7×24小時(shí)不間斷服務(wù)的前提下恢口,升級(jí)nginx的可執(zhí)行文件孝宗。也可以在不停止服務(wù)的情況下修改配置文件,更換日志文件等功能耕肩。- 其他
配置文件簡(jiǎn)單因妇,穩(wěn)定性高,成本低廉猿诸,節(jié)省帶寬(gzip壓縮)婚被,開源社區(qū)活躍等等。應(yīng)用場(chǎng)景
- 反向代理
反向代理應(yīng)該是Nginx做的最多的一件事了梳虽,反向代理方式是指以代理服務(wù)器來接受internet上的連接請(qǐng)求址芯,然后將請(qǐng)求轉(zhuǎn)發(fā)給內(nèi)部網(wǎng)絡(luò)上的服務(wù)器,并將從服務(wù)器上得到的結(jié)果返回給internet上請(qǐng)求連接的客戶端窜觉,此時(shí)代理服務(wù)器對(duì)外就表現(xiàn)為一個(gè)反向代理服務(wù)器谷炸。簡(jiǎn)單來說就是真實(shí)的服務(wù)器不能直接被外部網(wǎng)絡(luò)訪問,所以需要一臺(tái)代理服務(wù)器竖螃,而代理服務(wù)器能被外部網(wǎng)絡(luò)訪問的同時(shí)又跟真實(shí)服務(wù)器在同一個(gè)網(wǎng)絡(luò)環(huán)境淑廊,當(dāng)然也可能是同一臺(tái)服務(wù)器,端口不同而已特咆。
- 負(fù)載均衡
當(dāng)有2臺(tái)或以上服務(wù)器時(shí)季惩,可以根據(jù)規(guī)則隨機(jī)的將請(qǐng)求分發(fā)到指定的服務(wù)器上處理录粱,負(fù)載均衡配置一般都需要同時(shí)配置反向代理,通過反向代理跳轉(zhuǎn)到負(fù)載均衡画拾。 而 Nginx 目前支持自帶3種負(fù)載均衡策略啥繁,還有2種常用的第三方策略。
- RR(默認(rèn)方式)
每個(gè)請(qǐng)求按時(shí)間順序被分配到不同的后端服務(wù)器青抛,如果后端服務(wù)器掛掉旗闽,能自動(dòng)過濾。- 權(quán)重(自帶)
可以指定后端服務(wù)被訪問到的幾率蜜另。- ip_hash(自帶)
每個(gè)請(qǐng)求按訪問ip的hash結(jié)果分配适室,這樣每個(gè)訪客固定訪問一個(gè)后端服務(wù)器。- fair(第三方)
按后端服務(wù)器的響應(yīng)時(shí)間來分配請(qǐng)求举瑰,響應(yīng)時(shí)間短的優(yōu)先分配捣辆。- url_hash(第三方)
按訪問url的hash結(jié)果來分配請(qǐng)求,使url定向到同一個(gè)后端服務(wù)器此迅。
- HTTP服務(wù)器
nginx也是一個(gè)靜態(tài)資源的服務(wù)器汽畴,當(dāng)只有靜態(tài)資源的時(shí)候,就可以使用 Nginx 來做服務(wù)器耸序。當(dāng)然動(dòng)靜分離忍些,也可以通過 nginx 來實(shí)現(xiàn)。
nginx配置結(jié)構(gòu)
- 總體結(jié)構(gòu)預(yù)覽(后面會(huì)在詳細(xì)介紹)
##
# 全局配置
##
user nobody; ## 配置 worker 進(jìn)程的用戶和組
worker_processes auto; ## 配置 worker 進(jìn)程啟動(dòng)的數(shù)量坎怪,建議配置為 CPU 核心數(shù)
error_log logs/error.log; ## 全局錯(cuò)誤日志
pid /run/nginx.pid; ## 設(shè)置記錄主進(jìn)程 ID 的文件
worker_rlimit_nofile 8192; ## 配置一個(gè)工作進(jìn)程能夠接受并發(fā)連接的最大數(shù)
##
# 工作模式及連接數(shù)上限
##
events {
# epoll 是多路復(fù)用 IO(I/O Multiplexing)中的一種方式罢坝,
# 僅用于 Linux 2.6 以上內(nèi)核,可以大大提高 Nginx 性能
use epoll
worker_connections 4096; ## Defaule: 1024,單個(gè)后臺(tái) worker process 進(jìn)程的最大并發(fā)鏈接數(shù)
# 并發(fā)總數(shù) max_clients = worker_professes * worker_connections
# multi_accept on; ## 指明 worker 進(jìn)程立刻接受新的連接
}
##
# http 模塊
##
http {
##
# Basic Settings
##
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65; ## 連接超時(shí)時(shí)間
types_hash_max_size 2048; ## 指定散列類型表的最大大小
# server_tokens off;
# server_names_hash_bucket_size 64; # this seems to be required for some vhosts
# server_name_in_redirect off;
include /etc/nginx/mime.types; ## 設(shè)定 mine 類型
default_type application/octet-stream;
# 設(shè)定請(qǐng)求緩沖
client_header_buffer_size 128k; # 指定客戶端請(qǐng)求頭緩存大小芋忿,當(dāng)請(qǐng)求頭大于 1KB 時(shí)會(huì)用到該項(xiàng)
large_client_header_buffers 4 128k; # 最大數(shù)量和最大客戶端請(qǐng)求頭的大小
##
# SSL Settings
##
# 啟用所有協(xié)議炸客,禁用已廢棄的不安全的SSL 2 和SSL 3
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
# 讓服務(wù)器選擇要使用的算法套件
ssl_prefer_server_ciphers on;
##
# Logging Settings
##
access_log /var/log/nginx/access.log; ## 訪問日志
error_log /var/log/nginx/error.log; ## 錯(cuò)誤日志
##
# Gzip Settings
##
gzip on;
gzip_disable "msie6";
}
- nginx config配置詳解(后面會(huì)在詳細(xì)介紹)
從上面nginx的總體結(jié)預(yù)覽中可以看出nginx config的總體配置大致
分為5個(gè)部分
- 全局配置(user、worker_processes戈钢、error_log痹仙、pid)
user nobody
定義運(yùn)行nginx服務(wù)的用戶。如 user nobody nobody
worker_processes
定義nginx子進(jìn)程數(shù)量(提供服務(wù)的進(jìn)程數(shù)量)殉了,建議和服務(wù)cpu核數(shù)保持一致开仰。除了可以定義數(shù)字外,還可以定義為auto薪铜,表示讓系統(tǒng)自動(dòng)調(diào)整众弓。如:worker_processes 2 或 worker_processes auto
error_log
定義錯(cuò)誤日志的路徑,可以是相對(duì)路徑(相對(duì)prefix路徑的)隔箍,也可以是絕對(duì)路徑谓娃。也可以定義到http、server蜒滩、location里滨达,
如:error_log logs/error.log;
error_log 日志級(jí)別
定義錯(cuò)誤日志級(jí)別奶稠,常見的錯(cuò)誤日志級(jí)別有(低到高順序):
級(jí)別越高記錄的信息越少。如果不定義默認(rèn)是error
如:error_log logs/error.log notice
nginx pid 路徑
定義nginx進(jìn)程pid文件所在路徑捡遍,可以是相對(duì)路徑锌订,也可以是絕對(duì)路徑。如:pid logs/nginx.pid
worker_rlimit_nofile
定義nginx最多打開文件數(shù)限制画株。如果沒設(shè)置的話辆飘,這個(gè)值為操作系統(tǒng)(ulimit -n)的限制保持一致。把這個(gè)值設(shè)高谓传,nginx就不會(huì)有“too many open files”問題蜈项。如:worker_rlimit_nofile 100000- events(網(wǎng)絡(luò)連接相關(guān),worker_connections)
worker_connections 1024
定義每個(gè)work_process同時(shí)開啟的最大連接數(shù)良拼,即允許最多只能有這么多連接
accept_mutex on
當(dāng)某一個(gè)時(shí)刻只有一個(gè)網(wǎng)絡(luò)連接請(qǐng)求服務(wù)器時(shí)战得,服務(wù)器上有多個(gè)睡眠的進(jìn)程會(huì)被同時(shí)叫醒,這樣會(huì)損耗一定的服務(wù)器性能庸推。Nginx中的accept_mutex設(shè)置為on,將會(huì)對(duì)多個(gè)Nginx進(jìn)程(worker processer)接收連接時(shí)進(jìn)行序列化浇冰,防止多個(gè)進(jìn)程爭(zhēng)搶資源贬媒。默認(rèn)就是on
multi_accept on
nginx worker processer可以做到同時(shí)接收多個(gè)新到達(dá)的網(wǎng)絡(luò)連接,前提是把該參數(shù)設(shè)置為on肘习。默認(rèn)為off际乘,即每個(gè)worker process一次只能接收一個(gè)新到達(dá)的網(wǎng)絡(luò)連接。
use epoll
Nginx服務(wù)器提供了多個(gè)事件驅(qū)動(dòng)器模型來處理網(wǎng)絡(luò)消息漂佩。
其支持的類型有:select脖含、poll、kqueue投蝉、epoll养葵、rtsing、/dev/poll以及eventport瘩缆。
- select:只能在Windows下使用关拒,這個(gè)事件模型不建議在高負(fù)載的系統(tǒng)使用
- poll:Nginx默認(rèn)首選,但不是在所有系統(tǒng)下都可用
- kqueue:這種方式在FreeBSD 4.1+, OpenBSD2.9+, NetBSD 2.0, 和 MacOS X系統(tǒng)中是最高效的
- epoll: 這種方式是在Linux 2.6+內(nèi)核中最高效的方式
- rtsig:實(shí)時(shí)信號(hào)庸娱,可用在Linux 2.2.19的內(nèi)核中着绊,但不適用在高流量的系統(tǒng)中
- /dev/poll: Solaris 7 11/99+,HP/UX 11.22+, IRIX 6.5.15+, and Tru64 UNIX 5.1A+操作系統(tǒng)最高效的方式
- eventport: Solaris 10最高效的方式
- http(最重要的部分,大部分功能都放這里)
下一章 nginx(二)中繼續(xù)介紹- server(虛擬主機(jī)相關(guān))
下一章 nginx(二)中繼續(xù)介紹- location(server里面)
下一章 nginx(二)中繼續(xù)介紹
https://www.cnblogs.com/yudis/articles/6676636.html
https://blog.csdn.net/propro1314/article/details/46924687