Nginx 入门 server块 书写之 location 规则 (一) 一个高性能的支持高并发的Web服务器,代理服务器
反向代理
负载均衡
Web服务器
安全校验,接口限流
处理请求 1 2 3 4 5 6 7 8 server { listen 80; server_name localhost; location / { root html; index index.html index.htm; } }
接受请求后会通过listen 以及 server_name 来匹配server模块,然后根据location匹配路径资源,一个典型的应用就是一个二级域名下的子域名全部代理到同一个端口
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 server { listen 80; server_name demo1.aaa.com; location / { root html1; index index.html index.htm; } } server { listen 80; server_name demo2.aaa.com; location / { root html2; index index.html index.htm; } }
location语法 先说alias 和 root 的区别 1 2 3 4 5 6 7 8 location /img/ { alias /var/www/image/; } location /img/ { root /var/www/image; }
所以使用alias 最后一定是 以 / 结尾 .
修饰符匹配 1 2 3 4 5 6 7 8 9 10 11 12 server { server_name website.com; location = /abcd { […] } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 server { server_name website.com; location ~ ^/abcd$ { […] } }
1 2 3 4 5 6 7 8 9 10 11 12 server { server_name website.com; location ~* ^/abcd$ { […] } }
以下表格 ~ 代表自己输入的英文字母
匹配符
匹配规则
优先级
=
精确匹配
1
^~
以某个字符开头
2
~
区分大小写的匹配正则
3
~*
不区分大小写的匹配正则
4
!~
区分大小写的不匹配正则
5
!~*
不区分大小写的不匹配正则
6
/
通用匹配,所有请求都匹配
7
** 前缀匹配下,返回最长匹配的 location,与 location 所在位置顺序无关**
1 2 3 4 5 6 7 8 9 10 11 12 server { server_name website.com; location /doc { return 702; } location /docu { return 701; } }
** 正则匹配使用文件中的顺序,找到返回**
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 server { listen 8080; server_name website.com; location ~ ^/doc[a-z]+ { return 701; } location ~ ^/docu[a-z]+ { return 702; } } server { listen 8080; server_name website.com; location ~ ^/docu[a-z]+ { return 702; } location ~ ^/doc[a-z]+ { return 701; } }
所以当有多个匹配时匹配优先级如下
先精确匹配,没有则查找带有 ^~
的前缀匹配,没有则进行正则匹配,最后才返回前缀匹配的结果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 location = / { [ configuration A ] } location / { [ configuration B ] } location /documents/ { [ configuration C ] } location ^~ /images/ { [ configuration D ] } location ~* \.(gif|jpg|jpeg)$ { [ configuration E ] } / -> configuration A /index.html -> configuration B /documents/document.html -> configuration C /images/1.gif -> configuration D /documents/1.jpg -> configuration E