nginx包含一個master進(jìn)程和多個worker進(jìn)程。master進(jìn)程負(fù)責(zé)讀取搜变、執(zhí)行配置并且管理維護(hù)worker進(jìn)程忌栅。worker進(jìn)程負(fù)責(zé)接收處理請求锄贼。nginx使用事件驅(qū)動模型(event-based)和依賴操作系統(tǒng)的(OS-dependent)機(jī)制高效地將請求分發(fā)給worker進(jìn)程。工作進(jìn)程的數(shù)量在配置文件中定義注簿,可以針對給定的配置進(jìn)行固定契吉,也可以根據(jù)可用CPU內(nèi)核的數(shù)量自動調(diào)整。
開啟诡渴、停止和重新加載配置
nginx -s signal
signal 可以有如下選擇
- stop 快速停止栅隐,即直接馬上停止worker進(jìn)程,不管其工作完成與否
- quit 優(yōu)雅的停止玩徊,等待所有worker進(jìn)程完成手頭上工作再停止
- reload 重新加載配置文件
- reopen 重新加載日志文件
一旦master進(jìn)程接收到signal信號租悄,它會檢驗新配置文件的語法并嘗試應(yīng)用其中的配置。如果應(yīng)用成功恩袱,master進(jìn)程開啟新的工作進(jìn)程泣棋,并發(fā)送信息通知舊的worker進(jìn)程可以退休了;否則master進(jìn)程回滾配置的改變畔塔,按原來的配置繼續(xù)工作潭辈。
worker進(jìn)程退休過程?
- 停止接收新請求
- 服務(wù)好當(dāng)前請求
- 退休
除此之外澈吨,linux環(huán)境可以使用kill命令將信號發(fā)送給nginx進(jìn)程
kill -s QUIT pid
nginx的pid保存于nginx.pid把敢;默認(rèn)情況下,nginx.pid 位于 /usr/local/nginx/logs
或 /var/run
目錄下谅辣。
ps
命令可以用于查看所有運(yùn)行中的nginx進(jìn)程
ps -ax | grep nginx
對于發(fā)送信號到nginx修赞,如果你想了解更多,可以查看 控制nginx
配置文件的結(jié)構(gòu)
nginx由多個模塊組成桑阶,這些模塊被在配置文件里所指定的指令控制柏副。指令分為 簡單指令和 塊指令勾邦。簡單指令包含以空格分離的名稱和參數(shù),以分號(;)作為結(jié)束標(biāo)志割择。雖說結(jié)構(gòu)一樣眷篇,但塊指令是以用花括號({})包圍的一組指令結(jié)束。如果塊指令可以包含其他指令荔泳,那么該塊指令就稱為上下文(context)(比如:events,http,server,location)
提供靜態(tài)內(nèi)容
#默認(rèn)監(jiān)聽端口80
#root:根目錄指令蕉饼,后面跟目錄路徑
server {
location / {
root /data/www;
}
location /images/ {
root /data;
}
}
如果nginx未啟動,則使用nginx -s start玛歌;否則使用nginx -s reload椎椰。
如果nginx沒按預(yù)期工作, 可以從 /usr/local/nginx/logs
或 /var/log/nginx
下的 access.log
沾鳄、error.log
查看原因慨飘。
配置一個簡單的代理服務(wù)器
# 再開啟一個nginx實例,監(jiān)聽8080端口
server {
listen 8080;
#全局root指令译荞,適用于所有未指定root指令的location塊指令
root /data/up1;
location / {
}
}
#修改前面的配置并reload
#通過訪問localhost:80 nginx會代理訪問 localhost:8080
server {
location / {
proxy_pass http://localhost:8080;
}
#匹配以.gif | .jpg | .png 結(jié)尾的uri
location ~ \.(gif|jpg|png)$ {
root /data/images;
}
}
設(shè)置FastCGI代理
什么是FastCGI服務(wù)器瓤的?
使用任何框架和編程語言(比如PHP)構(gòu)建的各類應(yīng)用。
要與FastCGI服務(wù)器協(xié)作吞歼,nginx要使用的指令是 fastcgi_pass
而不是 prox_pass
圈膏。并且可以通過fastcgi_pass
指令設(shè)置一些參數(shù)。
# 顧名思義
# document_root 文檔根路徑篙骡,等價于 root指令的參數(shù)
# fastcgi_script_name 腳本的名稱稽坤,比如index.php
# SCRIPT_FILENAME 腳本文件路徑全稱
# query_string 傳遞請求參數(shù)
server {
location / {
fastcgi_pass localhost:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param QUERY_STRING $query_string;
}
location ~ \.(gif|jpg|png)$ {
root /data/images;
}
}