server
虛擬服務(wù)器配置〔隙可以基于IP配置免猾,也可基于名稱(chēng)配置是辕,二者沒(méi)有明顯的區(qū)分。listen
指令描述server接收請(qǐng)求的所有地址和端口猎提,server_name
配置客戶(hù)端可以請(qǐng)求到的所有服務(wù)器名稱(chēng)列表获三。
listen
為虛擬服務(wù)器接收請(qǐng)求設(shè)置IP和端口或者UNIX-domain套接字的路徑。
可以同時(shí)指定IP地址和端口锨苏;
也可以只指定IP地址或只指定端口疙教;
只指定IP地址情況,端口默認(rèn)是
80
伞租;地址也可以是主機(jī)名(hosts)贞谓;
-
0.7.36版本開(kāi)始可以通過(guò)中括號(hào)指定IPV6地址;
listen [::]:8000; listen [::1];
-
0.8.21版本開(kāi)始可通過(guò)
unix:
前綴指定UNIX-domain套接字路徑葵诈;listen unix:/var/run/nginx.sock;
沒(méi)有顯式配置
listen
指定的情況下裸弦,如果nginx是以超級(jí)權(quán)限用戶(hù)運(yùn)行的祟同,則默認(rèn)端口是80
,否則默認(rèn)是端口是8000
理疙。
語(yǔ)法
listen address[:port] [default_server] [ssl] [http2 | spdy] [proxy_protocol] [setfib=number] [fastopen=number] [backlog=number] [rcvbuf=size] [sndbuf=size] [accept_filter=filter] [deferred] [bind] [ipv6only=on|off] [reuseport] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];
listen port [default_server] [ssl] [http2 | spdy] [proxy_protocol] [setfib=number] [fastopen=number] [backlog=number] [rcvbuf=size] [sndbuf=size] [accept_filter=filter] [deferred] [bind] [ipv6only=on|off] [reuseport] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];
listen unix:path [default_server] [ssl] [http2 | spdy] [proxy_protocol] [backlog=number] [rcvbuf=size] [sndbuf=size] [accept_filter=filter] [deferred] [bind] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];
默認(rèn)值
listen *:80 | *:8000;
parameters列表
default_server
- 指定當(dāng)前服務(wù)器是指定地址和端口的默認(rèn)服務(wù)器晕城;
- 如果所以的
listen
指令都沒(méi)有配置default_server
指令,則配置列表中的一個(gè)服務(wù)器為默認(rèn)服務(wù)器窖贤; - 0.8.21版本之前
default_server
是default
砖顷。
ssl
指定當(dāng)前端口下的所有請(qǐng)求都工作在SSL模式下(從0.7.14版本開(kāi)始起用)。
server {
listen 80;
listen 443 ssl;
server_name www.example.com;
ssl_certificate www.example.com.crt;
ssl_certificate_key www.example.com.key;
...
}
表示服務(wù)器可以同時(shí)處理HTTP和HTTPS請(qǐng)求赃梧。
http2
配置當(dāng)前端口是接受HTTP/2 請(qǐng)求連接的滤蝠,一般情況下應(yīng)當(dāng)同時(shí)指定ssl
參數(shù)(可不指定)。(從1.9.5版本開(kāi)始起用)
spdy
配置當(dāng)前端口是接受SPDY請(qǐng)求鏈接的槽奕,一般情況下應(yīng)當(dāng)同時(shí)指定ssl
參數(shù)(可不指定)几睛。(在1.3.15-1.9.4版本中使用)
listen
指令還有一些針對(duì)套接字調(diào)用相關(guān)的參數(shù),參考官網(wǎng)指導(dǎo)手冊(cè)
server_name
配置虛擬服務(wù)器的名稱(chēng)列表粤攒。
通過(guò)名稱(chēng)搜索虛擬服務(wù)器時(shí)睬愤,遵循以下規(guī)則:
- 確切名稱(chēng)匹配
- 以“*”起始的最長(zhǎng)通配符名稱(chēng)匹配
- 以“*”結(jié)尾的最長(zhǎng)通配符名稱(chēng)陪陪
- 第一個(gè)正則匹配(匹配順序與配置順序有關(guān),匹配到第一個(gè)正則停止)
通配符名稱(chēng)
通配符名稱(chēng)是指在虛擬服務(wù)器名稱(chēng)前面或者后面配置一個(gè)“*”坤塞,緊接著“*”的是點(diǎn)(.
)慢味。
“*.example.org”可以匹配到“www.example.org”,也可以匹配到“www.sub.example.org”盔几。
“.example.org”可以當(dāng)做是“example.org”和“*.example.org”的組合晴弃。
類(lèi)似“www.*.example.org”或者“w*.example.org"的配置是無(wú)效的。
正則表達(dá)式名稱(chēng)
正則表達(dá)式配置虛擬服務(wù)器名稱(chēng)需滿(mǎn)足以下條件:
- 一定要以波浪線(
~
)作為起始符號(hào) - 表達(dá)式放在在(
^
)和($
)之間 - 正則表達(dá)式中的點(diǎn)(
.
)需要用反斜杠(\
)轉(zhuǎn)義 - 如果正則表達(dá)式中有花括號(hào)(
{}
)逊拍,正則表達(dá)式需要用引號(hào)(""
)括起來(lái)
server_name ~^www\d+\.example\.net$;
server_name "~^(?<name>\w\d{1,3}+)\.example\.net$";
混合名稱(chēng)
如果需要處理請(qǐng)求投中沒(méi)有"Host"字段的請(qǐng)求上鞠,server_name中可以指定空引號(hào)(""
)。(從0.8.48版本開(kāi)始芯丧,server_name
默認(rèn)是""芍阎,之前的版本默認(rèn)是hostname)
也可以指定為具體的IP地址
server {
listen 80;
server_name example.org
www.example.org
""
192.168.1.1
;
...
}
_
符號(hào)表示可以匹配所有的名稱(chēng),無(wú)論是正規(guī)域名缨恒,還是形如“!@#
”或者“--
” 等不正規(guī)的名稱(chēng)皆可匹配谴咸。(這種方式不推薦使用)
server {
listen 80 default_server;
server_name _;
return 444;
}
可以在server_name
指令中通過(guò)使用ASCII (Punycode) 表示國(guó)際化域名(IDNs)
server {
listen 80;
server_name xn--e1afmkfd.xn--80akhbyknj4f;
...
}
最佳實(shí)踐
確切名稱(chēng)、以星號(hào)起始的通配符名稱(chēng)骗露、以星號(hào)結(jié)尾的通配符名稱(chēng)分別存儲(chǔ)在綁定于端口的三張哈希表中岭佳,哈希表搜索順序如前面所述
- 確切名稱(chēng)
- 以星號(hào)起始的通配符名稱(chēng)
- 以星號(hào)結(jié)束的通配符名稱(chēng)
- 正則表達(dá)式
搜索速度由快到慢順序
- 確切名稱(chēng)
- 通配符
- 正則表達(dá)式
因此,盡可能的配置確切名稱(chēng)萧锉。比如請(qǐng)求exmaple.org和www.example.org的頻率較高珊随,那么如下第一種配置明顯優(yōu)于第二種配置
server {
listen 80;
server_name example.org www.example.org *.example.org;
...
}
server {
listen 80;
server_name .example.org;
...
}
如果配置服務(wù)器名稱(chēng)過(guò)多或者長(zhǎng)度過(guò)長(zhǎng),可能需要調(diào)整server_names_hash_max_size
和 server_names_hash_bucket_size指令柿隙。
location
配置請(qǐng)求URI叶洞。
語(yǔ)法
location [ = | ~ | ~* | ^~ ] uri { ... }
location @name { ... }
默認(rèn)值
-
說(shuō)明
匹配是針對(duì)規(guī)范化URI執(zhí)行的辨赐,對(duì)形如“%XX”的編碼文本會(huì)進(jìn)行解碼操作,對(duì)
.
或者..
的相對(duì)路徑引用會(huì)進(jìn)行解析京办,對(duì)相鄰的兩個(gè)或多個(gè)斜杠會(huì)壓縮成一個(gè)掀序;location
可以通過(guò)前綴串定義,也可以通過(guò)正則表達(dá)式定義惭婿;通過(guò)正則表達(dá)式定義時(shí)不恭,
~*
作為前修飾符表示大小寫(xiě)不敏感,~
作為前修飾符表示大小寫(xiě)敏感财饥;-
根據(jù)請(qǐng)求匹配
location
的過(guò)程- 在配置的
location
列表中搜索URI不帶參數(shù)的最完整字符串换吧,逐漸減短匹配串,最長(zhǎng)的成功匹配將會(huì)被選擇并保存钥星; - 根據(jù)配置順序匹配正則表達(dá)式沾瓦,匹配成功則停止;
- 如果正則表達(dá)式匹配成功谦炒,則使用正則表達(dá)式匹配成功的
location
贯莺,否則使用第一步匹配到的location
;
- 在配置的
前綴匹配中匹配到的最長(zhǎng)
location
如果有^~
作為前修飾符宁改,則不會(huì)進(jìn)行正則匹配缕探;如果使用
=
修飾,會(huì)進(jìn)行確切值的匹配还蹲,且匹配成功停止繼續(xù)匹配爹耗;該location
不可嵌套其他location
;在0.7.1版本到0.8.41版本中谜喊,匹配打的前綴
location
即使沒(méi)有=
或者^~
作為前修飾符潭兽,也會(huì)停止匹配;@
作為前綴定義的lcation
斗遏,不用來(lái)處理常規(guī)請(qǐng)求山卦,而是用來(lái)重定向請(qǐng)求;這種location
不能被嵌套最易,也不能其它location
怒坯;-
如果一個(gè)前綴字符串定義到
location
以斜杠(/
)結(jié)尾炫狱,請(qǐng)求被proxy_pass藻懒,fastcgi_pass,uwsgi_pass,
scgi_pass视译,memcached_pass嬉荆,grpc_pass處理,請(qǐng)求會(huì)轉(zhuǎn)向原請(qǐng)求串不帶后斜杠的請(qǐng)求上酷含,301(永久重定向)碼會(huì)返回給帶有后斜杠的請(qǐng)求鄙早⊥艏耄可以通過(guò)下面的方式配置完全匹配來(lái)解決:location /user/ { proxy_pass http://user.example.com; } location = /user { proxy_pass http://login.example.com; }
其他文章列表
spring web service系列1
spring web service系列2
spring web service系列3
maven配置文件settings.xml詳解
Nginx轉(zhuǎn)發(fā)請(qǐng)求過(guò)程解析
Nginx中的負(fù)載均衡算法
Nginx upstream指令配置說(shuō)明
Nginx中proxy_pass/proxy_redirect/proxy_set_header配置說(shuō)明
Nginx中ngx_http_core_module相關(guān)指令配置說(shuō)明
Java自帶JVM監(jiān)控工具jstat使用詳細(xì)說(shuō)明
Java自帶JVM監(jiān)控工具jps使用詳細(xì)說(shuō)明
Java自帶故障分析工具jmap工具使用說(shuō)明
Java自帶故障分析工具jhat工具使用說(shuō)明