配置文件結(jié)構(gòu)
全局配置(user、worker_processes、error_log、pid)
events(網(wǎng)絡(luò)連接相關(guān),worker_connections)
http(最重要的部分,大部分功能都放這里)
server(虛擬主機(jī)相關(guān))
location(server里面)
創(chuàng)新互聯(lián)公司主營(yíng)多倫網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,成都App定制開發(fā),多倫h5微信小程序搭建,多倫網(wǎng)站營(yíng)銷推廣歡迎多倫等地區(qū)企業(yè)咨詢
全局配置項(xiàng)結(jié)構(gòu)
https://coding.net/u/aminglinux/p/nginx/git/blob/master/3z/global.md
events配置項(xiàng)結(jié)構(gòu)
https://coding.net/u/aminglinux/p/nginx/git/blob/master/3z/events.md
http配置項(xiàng)
https://coding.net/u/aminglinux/p/nginx/git/blob/master/3z/http.md
server配置項(xiàng)
https://coding.net/u/aminglinux/p/nginx/git/blob/master/3z/server.md
nginx.conf全局配置
user nobody;
#定義運(yùn)行nginx服務(wù)的用戶,還可以加上組,如 user nobody nobody;
worker_processes 1;
#定義nginx子進(jìn)程數(shù)量,即提供服務(wù)的進(jìn)程數(shù)量,該數(shù)值建議和服務(wù)cpu核數(shù)保持一致。
#除了可以定義數(shù)字外,還可以定義為auto,表示讓系統(tǒng)自動(dòng)調(diào)整。
error_log logs/error.log;
#定義錯(cuò)誤日志的路徑,可以是相對(duì)路徑(相對(duì)prefix路徑的),也可以是絕對(duì)路徑。
#該配置可以在此處定義,也可以定義到http、server、location里
error_log logs/error.log notice;
#定義錯(cuò)誤日志路徑以及日志級(jí)別.
#錯(cuò)誤日志級(jí)別:常見的錯(cuò)誤日志級(jí)別有[debug|info|notice|warn|error|crit|alert|emerg],級(jí)別越高記錄的信息越少。
#如果不定義默認(rèn)是error
pid logs/nginx.pid;
#定義nginx進(jìn)程pid文件所在路徑,可以是相對(duì)路徑,也可以是絕對(duì)路徑。
worker_rlimit_nofile 100000;
#定義nginx最多打開文件數(shù)限制。如果沒設(shè)置的話,這個(gè)值為操作系統(tǒng)(ulimit -n)的限制保持一致。
#把這個(gè)值設(shè)高,nginx就不會(huì)有“too many open files”問(wèn)題了。
#events配置部分
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)器模型來(lái)處理網(wǎng)絡(luò)消息。
#其支持的類型有:select、poll、kqueue、epoll、rtsing、/dev/poll以及eventport。
#http配置部分
#官方文檔 http://nginx.org/en/docs/
#參考鏈接: https://segmentfault.com/a/1190000012672431
#參考鏈接: https://segmentfault.com/a/1190000002797601
#參考鏈接:http的header https://kb.cnblogs.com/page/92320/
MIME-Type
include mime.types; //cat conf/mime.types
#定義nginx能識(shí)別的網(wǎng)絡(luò)資源媒體類型(如,文本、html、js、css、流媒體等)
default_type application/octet-stream;
#定義默認(rèn)的type,如果不定義改行,默認(rèn)為text/plain.
log_format
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
#其中main為日志格式的名字,后面的為nginx的內(nèi)部變量組成的一串字符串。
access_log logs/access.log main;
#定義日志的路徑以及采用的日志格式,該參數(shù)可以在server配置塊中定義。
sendfile on;
#是否調(diào)用sendfile函數(shù)傳輸文件,默認(rèn)為off,使用sendfile函數(shù)傳輸,可以減少user mode和kernel mode的切換,從而提升服務(wù)器性能。
#對(duì)于普通應(yīng)用設(shè)為 on,如果用來(lái)進(jìn)行下載等應(yīng)用磁盤IO重負(fù)載應(yīng)用,可設(shè)置為off,以平衡磁盤與網(wǎng)絡(luò)I/O處理速度,降低系統(tǒng)的負(fù)載。
sendfile_max_chunk 128k;
#該參數(shù)限定Nginx worker process每次調(diào)用sendfile()函數(shù)傳輸數(shù)據(jù)的最大值,默認(rèn)值為0,如果設(shè)置為0則無(wú)限制。
tcp_nopush on;
#當(dāng)tcp_nopush設(shè)置為on時(shí),會(huì)調(diào)用tcp_cork方法進(jìn)行數(shù)據(jù)傳輸。
#使用該方法會(huì)產(chǎn)生這樣的效果:當(dāng)應(yīng)用程序產(chǎn)生數(shù)據(jù)時(shí),內(nèi)核不會(huì)立馬封裝包,而是當(dāng)數(shù)據(jù)量積累到一定量時(shí)才會(huì)封裝,然后傳輸。這樣有助于解決網(wǎng)絡(luò)堵塞問(wèn)題。
#默認(rèn)值為on。舉例:快遞員收快遞、發(fā)快遞,包裹累積到一定量才會(huì)發(fā),節(jié)省運(yùn)輸成本。
keepalive_timeout 65 60;
#該參數(shù)有兩個(gè)值,第一個(gè)值設(shè)置nginx服務(wù)器與客戶端會(huì)話結(jié)束后仍舊保持連接的最長(zhǎng)時(shí)間,單位是秒,默認(rèn)為75s。
#第二個(gè)值可以省略,它是針對(duì)客戶端的瀏覽器來(lái)設(shè)置的,可以通過(guò)curl -I看到header信息中有一項(xiàng)Keep-Alive: timeout=60,如果不設(shè)置就沒有這一項(xiàng)。
#第二個(gè)數(shù)值設(shè)置后,瀏覽器就會(huì)根據(jù)這個(gè)數(shù)值決定何時(shí)主動(dòng)關(guān)閉連接,Nginx服務(wù)器就不操心了。但有的瀏覽器并不認(rèn)可該參數(shù)。
send_timeout
#這個(gè)超時(shí)時(shí)間是發(fā)送響應(yīng)的超時(shí)時(shí)間,即Nginx服務(wù)器向客戶端發(fā)送了數(shù)據(jù)包,但客戶端一直沒有去接收這個(gè)數(shù)據(jù)包。
#如果某個(gè)連接超過(guò)send_timeout定義的超時(shí)時(shí)間,那么Nginx將會(huì)關(guān)閉這個(gè)連接。
client_max_body_size 10m;
#瀏覽器在發(fā)送含有較大HTTP包體的請(qǐng)求時(shí),其頭部會(huì)有一個(gè)Content-Length字段,client_max_body_size是用來(lái)限制Content-Length所示值的大小的。
#這個(gè)限制包體的配置不用等Nginx接收完所有的HTTP包體,就可以告訴用戶請(qǐng)求過(guò)大不被接受。會(huì)返回413狀態(tài)碼。
#例如,用戶試圖上傳一個(gè)1GB的文件,Nginx在收完包頭后,發(fā)現(xiàn)Content-Length超過(guò)client_max_body_size定義的值,
#就直接發(fā)送413(Request Entity Too Large)響應(yīng)給客戶端。
gzip on;
#是否開啟gzip壓縮。
gzip_min_length 1k;
#設(shè)置允許壓縮的頁(yè)面最小字節(jié)數(shù),頁(yè)面字節(jié)數(shù)從header頭得content-length中進(jìn)行獲取。默認(rèn)值是20。建議設(shè)置成大于1k的字節(jié)數(shù),小于1k可能會(huì)越壓越大。
gzip_buffers 4 16k;
#設(shè)置系統(tǒng)獲取幾個(gè)單位的buffer用于存儲(chǔ)gzip的壓縮結(jié)果數(shù)據(jù)流。4 16k代表分配4個(gè)16k的buffer。
gzip_http_version 1.1;
#用于識(shí)別 http 協(xié)議的版本,早期的瀏覽器不支持 Gzip 壓縮,用戶會(huì)看到亂碼,所以為了支持前期版本加上了這個(gè)選項(xiàng)。
#如果你用了Nginx反向代理并期望也啟用Gzip壓縮的話,由于末端通信是http/1.1,故請(qǐng)?jiān)O(shè)置為 1.1。
gzip_comp_level 6;
#gzip壓縮比,1壓縮比最小處理速度最快,9壓縮比最大但處理速度最慢(傳輸快但比較消耗cpu)
gzip_types mime-type ... ;
#匹配mime類型進(jìn)行壓縮,無(wú)論是否指定,”text/html”類型總是會(huì)被壓縮的。
#在conf/mime.conf里查看對(duì)應(yīng)的type。
#示例:gzip_types text/plain application/x-javascript text/css text/html application/xml;
gzip_proxied any;
#Nginx作為反向代理的時(shí)候啟用,決定開啟或者關(guān)閉后端服務(wù)器返回的結(jié)果是否壓縮,匹配的前提是后端服務(wù)器必須要返回包含”Via”的 header頭。
#以下為可用的值:
#off - 關(guān)閉所有的代理結(jié)果數(shù)據(jù)的壓縮
#expired - 啟用壓縮,如果header頭中包含 "Expires" 頭信息
#no-cache - 啟用壓縮,如果header頭中包含 "Cache-Control:no-cache" 頭信息
#no-store - 啟用壓縮,如果header頭中包含 "Cache-Control:no-store" 頭信息
#private - 啟用壓縮,如果header頭中包含 "Cache-Control:private" 頭信息
#no_last_modified - 啟用壓縮,如果header頭中不包含 "Last-Modified" 頭信息
#no_etag - 啟用壓縮 ,如果header頭中不包含 "ETag" 頭信息
#auth - 啟用壓縮 , 如果header頭中包含 "Authorization" 頭信息
#any - 無(wú)條件啟用壓縮
gzip_vary on;
#和http頭有關(guān)系,會(huì)在響應(yīng)頭加個(gè) Vary: Accept-Encoding ,可以讓前端的緩存服務(wù)器緩存經(jīng)過(guò)gzip壓縮的頁(yè)面,例如,用Squid緩存經(jīng)過(guò)Nginx壓縮的數(shù)據(jù)。
nginx.conf server部分配置
server{} 包含在http{}內(nèi)部,每一個(gè)server{}都是一個(gè)虛擬主機(jī)(站點(diǎn))。
以下為nginx.conf配置文件中server{}部分的內(nèi)容。
server {
listen 80; //監(jiān)聽端口為80,可以自定義其他端口,也可以加上IP地址,如,listen 127.0.0.1:8080;
server_name localhost; //定義網(wǎng)站域名,可以寫多個(gè),用空格分隔。
#charset koi8-r; //定義網(wǎng)站的字符集,一般不設(shè)置,而是在網(wǎng)頁(yè)代碼中設(shè)置。
#access_log logs/host.access.log main; //定義訪問(wèn)日志,可以針對(duì)每一個(gè)server(即每一個(gè)站點(diǎn))設(shè)置它們自己的訪問(wèn)日志。
##在server{}里有很多l(xiāng)ocation配置段
location / {
root html; //定義網(wǎng)站根目錄,目錄可以是相對(duì)路徑也可以是絕對(duì)路徑。
index index.html index.htm; //定義站點(diǎn)的默認(rèn)頁(yè)。
}
#error_page 404 /404.html; //定義404頁(yè)面
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html; //當(dāng)狀態(tài)碼為500、502、503、504時(shí),則訪問(wèn)50x.html
location = /50x.html {
root html; //定義50x.html所在路徑
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#定義訪問(wèn)php腳本時(shí),將會(huì)執(zhí)行本location{}部分指令
#location ~ \.php$ {
# proxy_pass http://127.0.0.1; //proxy_pass后面指定要訪問(wèn)的url鏈接,用proxy_pass實(shí)現(xiàn)代理。
#}
# 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服務(wù)器監(jiān)聽端口與地址,支持兩種形式,1 IP:Port, 2 unix:/path/to/sockt
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; //定義SCRIPT_FILENAME變量,后面的路徑/scripts為上面的root指定的目錄
# include fastcgi_params; //引用prefix/conf/fastcgi_params文件,該文件定義了fastcgi相關(guān)的變量
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht { //訪問(wèn)的url中,以/.ht開頭的,如,www.example.com/.htaccess,會(huì)被拒絕,返回403狀態(tài)碼。
# deny all; //這里的all指的是所有的請(qǐng)求。
#}
}
#
#server {
#}
#
#server {
#}
線上nginx的配置文件就不分享了,涉及保密協(xié)議