1? 概述
本文將介紹nginx里http配置段的相關(guān)配置亥至,主要介紹ngx_http_core_module這個(gè)模塊的相關(guān)功能和命令泳梆。由于主配置文件的http配置段里有 include?/etc/nginx/conf.d/*.conf; 這個(gè)配置,因此可以單獨(dú)在路徑/etc/nginx/conf.d/下面單獨(dú)編寫(xiě)配置文件
2? HTTP配置段
2.1? http協(xié)議相關(guān)的配置結(jié)構(gòu)
http?{
...
...各server的公共配置
server?{每個(gè)server用于定義一個(gè)虛擬主機(jī)
...
}
server?{
...
server_name?虛擬主機(jī)名
root?主目錄
alias?路徑別名
location?[OPERATOR]?URL?{?指定URL的特性
...
if?CONDITION?{
...
}
}
}
}
2.2? 與套接字相關(guān)的配置
.1、server
server { ... }
在ngnix里偿荷,實(shí)際是沒(méi)有virtualhost的概念窘游,都是主機(jī),監(jiān)聽(tīng)端口號(hào)跳纳,要放在server里忍饰,不能所有的機(jī)器只用一個(gè)監(jiān)聽(tīng)端口配置。要分別配置監(jiān)聽(tīng)端口
配置一個(gè)虛擬主機(jī)
server {
listen ?address[:PORT]|PORT;
server_name? SERVER_NAME;
root ?/PATH/TO/DOCUMENT_ROOT;
}
注意:listen ?address[:PORT]|PORT;是兩種寫(xiě)法
寫(xiě)法一:listen? 172.18.50.73:8080
寫(xiě)法二:listen? 8080
例子
server {
listen 17
2.18.50.73:8088;
server_name www.sunny.com;
root /usr/share/nginx/html/diysrv;
}
.2寺庄、listen
listen PORT|address[:port]|unix:/PATH/TO/SOCKET_FILE
listen address[:port] [default_server][ssl] [http2 | spdy] [backlog=number] [rcvbuf=size] [sndbuf=size]
default_server設(shè)定為默認(rèn)虛擬主機(jī)
ssl限制僅能夠通過(guò)ssl連接提供服務(wù)
backlog=number超過(guò)并發(fā)連接數(shù)后艾蓝,新請(qǐng)求進(jìn)入后援隊(duì)列的長(zhǎng)度
rcvbuf=size接收緩沖區(qū)大小
sndbuf=size發(fā)送緩沖區(qū)大小
虛擬主機(jī)的創(chuàng)建,三個(gè)方法
(1)基于port斗塘;
listen PORT;指令監(jiān)聽(tīng)在不同的端口
(2)基于ip的虛擬主機(jī)
listen IP:PORT; IP地址不同
(3)基于hostname
server_name? fqdn;指令指向不同的主機(jī)名
例子如下
注意:基于ip 和FQDN要把默認(rèn)主站點(diǎn)的server配置去除赢织,否則主頁(yè)面會(huì)出錯(cuò)
#基于ip
server {
listen 80;
server_name 172.18.50.199;
root /usr/share/nginx/html/baseip;
}
#基于FQDN
server {
listen 80;
server_name www.tracy.com;
location / {
root /usr/share/nginx/html/basefqdn;
index index.html;
}
}
#基于端口
server {
listen 9090;
server_name www.sunny.com;
root /usr/share/nginx/html/baseport;
}
.3、server_name
server_name name...;
.虛擬主機(jī)的主機(jī)名稱(chēng)后可跟多個(gè)由空白字符分隔的字符串
.支持*通配任意長(zhǎng)度的任意字符
dns先解析成名字馍盟,才和以下的配置做對(duì)比生效
server_name? *.magedu.com???www.magedu.*
.支持~起始的字符做正則表達(dá)式模式匹配于置,性能原因慎用
server_name? ~^www\d+\.magedu\.com$
以上語(yǔ)句\d表示[0-9],命令表示匹配www開(kāi)頭的贞岭,www[0-9].magedu.com結(jié)尾的
.匹配優(yōu)先級(jí)機(jī)制從高到低:
(1)首先是字符串精確匹配如:www.magedu.com
(2)左側(cè)*通配符如:*.magedu.com
(3)右側(cè)*通配符如:www.magedu.*
(4)正則表達(dá)式如:~^.*\.magedu\.com$
(5) default_server
.4八毯、tcp_nodelay
tcp_nodelay? on | off;
在keepalived模式下的連接是否啟用TCP_NODELAY選項(xiàng)
當(dāng)為off時(shí),延遲發(fā)送瞄桨,合并多個(gè)請(qǐng)求后再發(fā)送话速,湊齊多個(gè)請(qǐng)求后在發(fā)送給后臺(tái)處理,但是這個(gè)情況可能會(huì)導(dǎo)致客戶(hù)端等待讲婚,會(huì)比較慢尿孔,所以一般是不延遲發(fā)送
默認(rèn)on時(shí),不延遲發(fā)送
可用于:http,server, location
.5筹麸、sendfile
sendfile? on | off;
是否啟用sendfile功能活合,在內(nèi)核中封裝報(bào)文直接發(fā)送,速度更快,默認(rèn)Off
.6物赶、server_tokens
server_tokens??on | off | build | string
是否在響應(yīng)報(bào)文的Server首部顯示nginx版本白指,默認(rèn)是on,建議設(shè)置為off
2.3定義路徑相關(guān)的配置
.7、root
.設(shè)置web資源的路徑映射酵紫;用于指明請(qǐng)求的URL所對(duì)應(yīng)的文檔的目錄路徑告嘲,可用于http, server,location, if in location
server {
...
root ?/data/www/vhost1;
}
.8、location
location [ = | ~ | ~* | ^~ ]? uri{ ... }
=:對(duì)URI做精確匹配奖地;
^~:對(duì)URI的最左邊部分做匹配檢查橄唬,不區(qū)分字符大小寫(xiě)
~:對(duì)URI做正則表達(dá)式模式匹配,區(qū)分字符大小寫(xiě)
~*:對(duì)URI做正則表達(dá)式模式匹配参歹,不區(qū)分字符大小寫(xiě)
不帶符號(hào):匹配起始于此uri的所有的uri
匹配優(yōu)先級(jí)從高到低:=, ^~,~/~*,不帶符號(hào)
location @name { ... }
location是重點(diǎn)仰楚,可以定義復(fù)雜的邏輯關(guān)系,或者實(shí)現(xiàn)身份驗(yàn)證,重定向等, 后面跟URL僧界,根據(jù)URL做相應(yīng)的控制侨嘀,匹配到相應(yīng)的url后做什么操作, 這個(gè)相當(dāng)于條件判斷
在一個(gè)server中l(wèi)ocation配置段可存在多個(gè),用于實(shí)現(xiàn)從uri到文件系統(tǒng)的路徑映射捂襟;ngnix會(huì)根據(jù)用戶(hù)請(qǐng)求的URI來(lái)檢查定義的所有l(wèi)ocation咬腕,并找出一個(gè)最佳匹配,而后應(yīng)用其配置
.示例一:
server {
server_name? www.sunny.com;
location ?/images/ ?{
root ?/data/imgs/;
}
}
測(cè)試:當(dāng)訪問(wèn)http:// www.sunny.com/images/aa.jpg將會(huì)被轉(zhuǎn)到訪問(wèn)/data/imgs/images/aa.jpg
.9葬荷、alias
alias? path;
路徑別名涨共,文檔映射的另一種機(jī)制;僅能用于location上下文
例子
server {
listen 8080;
server_name www.sunny.com;
root /usr/share/nginx/html/diysrv;
location? /images {
alias? /app/test;
}
}
表示當(dāng)訪問(wèn)http://www.sunny.com:8080/images/將都會(huì)被轉(zhuǎn)換到路徑/app/test下的對(duì)應(yīng)資源
如訪問(wèn)http://www.sunny.com:8080/images/相當(dāng)于是訪問(wèn)了/app/test/index.html
如訪問(wèn)http://www.sunny.com:8080/images/aa相當(dāng)于是訪問(wèn)了/app/test/aa
區(qū)分alias和root例子:
location /bbs/ {
alias ?/web/forum/;
}
當(dāng)訪問(wèn)http://172.18.50.73/bbs相當(dāng)于訪問(wèn)該機(jī)器下的/web/forum/index.html資源
location /bbs/ {
root /web/forum/;
} --> /web/forum/bbs/index.html
當(dāng)訪問(wèn)http://172.18.50.73/bbs相當(dāng)于訪問(wèn)該機(jī)器下的/web/forum/bbs/index.html資源
.注意:location中使用root指令和alias指令的意義不同
(a) root闯狱,給定的路徑對(duì)應(yīng)于location中的/uri/左側(cè)的/
(b) alias煞赢,給定的路徑對(duì)應(yīng)于location中的/uri/右側(cè)的/
.10、index
index? file ...;
指定默認(rèn)網(wǎng)頁(yè)資源哄孤,注意:ngx_http_index_module模塊
.11、error_page
error_page? code ... [=[response]] ?uri;
模塊:ngx_http_core_module
定義錯(cuò)誤頁(yè)吹截,以指定的響應(yīng)狀態(tài)碼進(jìn)行響應(yīng)
可用位置:http,server, location, if in location
error_page 404 /404.html
error_page? 404 =200 /404.html
例子
例一瘦陈,用alias
error_page 404? /404.html;
location ?/404.html {
alias? /app/error_pages/404.html;
}
#表示當(dāng)訪問(wèn)網(wǎng)站出現(xiàn)404報(bào)錯(cuò)的時(shí)候,就跳轉(zhuǎn)到/app/error_pages/404.html這個(gè)頁(yè)面
例二波俄,用root
error_page 404? /404.html;
location ?/404.html {
alias? /app/error_pages/;
}
#表示當(dāng)訪問(wèn)網(wǎng)站出現(xiàn)404報(bào)錯(cuò)的時(shí)候晨逝,就跳轉(zhuǎn)到/app/error_pages/404.html這個(gè)頁(yè)面
例三
error_page 404=200? /404.html;
location /404.html {
alias?/app/error_pages/404.html;
}
#注意等號(hào)的位置,404后面有空格懦铺,然后跟=200捉貌,等號(hào)和200之間沒(méi)有空格,錯(cuò)誤頁(yè)面返回200的代碼冬念,而不返回404代碼趁窃,防止客戶(hù)端訪問(wèn)該網(wǎng)頁(yè)發(fā)生錯(cuò)誤代碼的時(shí)候被劫持
.12、try_files
try_files? file ... uri;
try_files? file ... =code;
按順序檢查文件是否存在急前,返回第一個(gè)找到的文件或文件夾(結(jié)尾加斜線表示為文件夾)醒陆,如果所有的文件或文件夾都找不到,會(huì)進(jìn)行一個(gè)內(nèi)部重定向到最后一個(gè)參數(shù)裆针。只有最后一個(gè)參數(shù)可以引起一個(gè)內(nèi)部重定向刨摩,之前的參數(shù)只設(shè)置內(nèi)部URI的指向。最后一個(gè)參數(shù)是回退URI且必須存在世吨,否則會(huì)出現(xiàn)內(nèi)部500錯(cuò)誤
例子
location ?/images/ ?{ try_files??$uri?? /images/default.gif; }
默認(rèn)先找$uri這個(gè)資源澡刹,如果沒(méi)有,就訪問(wèn)/images/default.gif
注意這里的$uri是變量耘婚,假設(shè)家目錄是/usr/share/nginx/html,那么上例表示訪問(wèn)http://172.18.50.73/images時(shí)嘗試訪問(wèn)/usr/share/nginx/html/images/index.html和/usr/share/nginx/html/ default.gif的資源
location / { try_files $uri? $uri /index.html $uri.html =404; }
表示依次先找$uri? $uri /index.html$uri.html罢浇,如果都不存在,就返回報(bào)錯(cuò)代碼是404報(bào)錯(cuò)
2.4定義客戶(hù)端請(qǐng)求的相關(guān)配置
.13边篮、keepalive_timeout
keepalive_timeout?? timeout ?[header_timeout];
設(shè)定保持連接超時(shí)時(shí)長(zhǎng)己莺,0表示禁止長(zhǎng)連接奏甫,默認(rèn)為75s,可以調(diào)整短點(diǎn)凌受。
.14阵子、keepalive_requests
keepalive_requests? number;
在一次長(zhǎng)連接上所允許請(qǐng)求的資源的最大數(shù)量,默認(rèn)為100
.15胜蛉、keepalive_disable
keepalive_disable?? none | browser ...
對(duì)哪種瀏覽器禁用長(zhǎng)連接
.16挠进、send_timeout
send_timeout?? time;
向客戶(hù)端發(fā)送響應(yīng)報(bào)文的超時(shí)時(shí)長(zhǎng),此處是指兩次寫(xiě)操作之間的間隔時(shí)長(zhǎng)誊册,而非整個(gè)響應(yīng)過(guò)程的傳輸時(shí)長(zhǎng)
.17领突、client_body_buffer_size
client_body_buffer_size? size;
用于接收每個(gè)客戶(hù)端請(qǐng)求報(bào)文的body部分的緩沖區(qū)大小案怯;默認(rèn)為16k君旦;超出此大小時(shí),其將被暫存到磁盤(pán)上的由client_body_temp_path指令所定義的位置嘲碱。注意金砍,這里是接收,不是下發(fā)數(shù)據(jù)麦锯,上傳文件到該網(wǎng)站恕稠,才看得到效果
.18、client_body_temp_path
client_body_temp_path? path [level1 [level2 [level3]]];
設(shè)定用于存儲(chǔ)客戶(hù)端請(qǐng)求報(bào)文的body部分的臨時(shí)存儲(chǔ)路徑及子目錄結(jié)構(gòu)和數(shù)量
這里指定的路徑下存放文件扶欣,目錄名為16進(jìn)制的數(shù)字鹅巍,是經(jīng)過(guò)hash運(yùn)算后,利用hash的值的最后幾位數(shù)料祠,依次分層骆捧,如三層目錄進(jìn)行存放文件
例子
client_body_temp_path?? /var/tmp/client_body? 1 2 2
1 1級(jí)目錄占1位16進(jìn)制,即2^4=16個(gè)目錄0-f
2 2級(jí)目錄占2位16進(jìn)制术陶,即2^8=256個(gè)目錄00-ff
2 3級(jí)目錄占2位16進(jìn)制凑懂,即2^8=256個(gè)目錄00-ff
2.5對(duì)客戶(hù)端進(jìn)行限制的相關(guān)配置
.19、limit_rate
limit_rate?? rate;
限制響應(yīng)給客戶(hù)端的傳輸速率梧宫,單位是bytes/second接谨,默認(rèn)值0表示無(wú)限制
.20、limit_except
limit_except? method ... { ... }塘匣,僅用于location
限制客戶(hù)端使用除了指定的請(qǐng)求方法之外的其它方法
method:GET, HEAD, POST, PUT, DELETE脓豪,MKCOL, COPY, MOVE,OPTIONS, PROPFIND,PROPPATCH, LOCK, UNLOCK, PATCH
location {
limit_except?? GET {
allow 192.168.1.0/24;
deny all;
}
}
除了GET和HEAD之外其它方法僅允許192.168.1.0/24網(wǎng)段主機(jī)使用
2.6文件操作優(yōu)化的配置
.21、aio
aio?? on | off | threads[=pool];是否啟用aio功能,默認(rèn)是on
.22忌卤、directio
directio? size | off;一般是異步
是否同步(直接)寫(xiě)磁盤(pán)扫夜,而非寫(xiě)緩存,在Linux主機(jī)啟用O_DIRECT標(biāo)記,則文件大于等于給定大小時(shí)使用笤闯,例如directio? 4m
.23堕阔、open_file_cache
open_file_cache? off;
open_file_cache? max=N ?[inactive=time];
nginx可以緩存以下三種信息:緩存的是元數(shù)據(jù),不是數(shù)據(jù)本身
(1)文件元數(shù)據(jù):文件的描述符颗味、文件大小和最近一次的修改時(shí)間
(2)打開(kāi)的目錄結(jié)構(gòu)
(3)沒(méi)有找到的或者沒(méi)有權(quán)限訪問(wèn)的文件的相關(guān)信息
max=N:可緩存的緩存項(xiàng)上限超陆;達(dá)到上限后會(huì)使用LRU算法實(shí)現(xiàn)管理
inactive=time:緩存項(xiàng)的非活動(dòng)時(shí)長(zhǎng),在此處指定的時(shí)長(zhǎng)內(nèi)未被命中的或命中的次數(shù)少于open_file_cache_min_uses指令所指定的次數(shù)的緩存項(xiàng)即為非活動(dòng)項(xiàng)浦马,將被刪除
inactive=time為10分鐘时呀;open_file_cache_min_uses為3,表示在10分鐘內(nèi)訪問(wèn)低于3次表示非活動(dòng)的晶默,該文件就不會(huì)被緩存谨娜,會(huì)被清空
.24、open_file_cache_errors
open_file_cache_errors?on | off;
是否緩存查找時(shí)發(fā)生錯(cuò)誤的文件一類(lèi)的信息,默認(rèn)值為off
.25磺陡、open_file_cache_min_uses
open_file_cache_min_uses? number;
open_file_cache指令的inactive參數(shù)指定的時(shí)長(zhǎng)內(nèi)趴梢,至少被命中此處指定的次數(shù)方可被歸類(lèi)為活動(dòng)項(xiàng),默認(rèn)值為1
.26、open_file_cache_valid
open_file_cache_valid? time;
緩存項(xiàng)有效性的檢查頻率,默認(rèn)值為60s