nginx location高级实战
-
location是nginx的核心重要功能,可以设置网站的访问路径,一个web server会有多个路径,那么location就得设置多个。
-
Nginx的locaiton作用是根据用户请求的URI不同,来执行不同的应用。
-
针对用户请求的网站URL进行匹配,匹配成功后进行对应的操作。
官网文档 https://nginx.org/en/docs/http/ngx_http_core_module.html#location
1.语法介绍
Syntax: location [ = | ~ | ~* | ^~ ] uri { ... } location @name { ... } Default: — Context: server, location 官网用法 location = / { [ configuration A ] } location / { [ configuration B ] } location /documents/ { [ configuration C ] } location ^~ /images/ { [ configuration D ] } location ~* \.(gif|jpg|jpeg)$ { [ configuration E ] } 测试用法,如果定义了如上的5个location,则 http://yuchaoit.cn/ 匹配A http://yuchaoit.cn/hello 匹配B http://yuchaoit.cn/documents/hello 匹配C http://yuchaoit.cn/images/葫芦娃.gif 匹配D http://yuchaoit.cn/documents/德玛西亚.gif 匹配E
2.location语法优先级
优先级从高到低
匹配符 | 匹配规则 | 优先级 |
---|---|---|
= | 定义 URI 和位置的精确匹配。 | 1 |
^~ | 以某个字符串开头,不检查正则 | 2 |
~ | 区分大小写的正则匹配 | 3 |
~* | 不区分大小写的正则匹配 | 4 |
3.测试location实战
# 配置文件如下 server { listen 22333; server_name _; # 最低级匹配,不符合其他locaiton就来这 # 属于通用url规则 location / { return 200 "location / \n"; } # 优先级最高,等于号后面可以指定url location = / { return 200 "location = / \n"; } #以/documents/开头的url,来这里,如符合其他locaiton,则以其他优先 location /documents/ { return 200 "location /documents/ \n"; } #匹配任何以/images/开头的请求,不匹配正则 location ^~ /images/ { return 200 "location ^~ /images/ \n"; } #匹配任何以.gif结尾的请求,支持正则 location ~* \.(gif|jpg|jpeg)$ { return 200 "location ~* \.(gif|jpg|jpeg) \n"; } access_log off; }
4.客户端测试访问
[root@master-61 ~]# # 精确匹配 [root@master-61 ~]#curl 10.0.0.9:22333 location = / [root@master-61 ~]# # 依然是精确匹配 [root@master-61 ~]#curl 10.0.0.9:22333/ location = / [root@master-61 ~]# # 没有满足的条件,因此匹配 / [root@master-61 ~]#curl 10.0.0.9:22333/yuchaoit location / [root@master-61 ~]# # 没有满足的条件,因此匹配 / ,这里注意结尾的斜线 [root@master-61 ~]#curl 10.0.0.9:22333/documents location / [root@master-61 ~]# # 符合匹配规则,匹配到了location /documents/ [root@master-61 ~]#curl 10.0.0.9:22333/documents/ location /documents/ [root@master-61 ~]# # 符合匹配规则,匹配到了location /documents/ [root@master-61 ~]#curl 10.0.0.9:22333/documents/yuchaoit.html location /documents/ [root@master-61 ~]# # 依然是没有符合的规则,默认匹配 / [root@master-61 ~]#curl 10.0.0.9:22333/yuchaoit/documents/yuchaoit.html location / [root@master-61 ~]# # 通过正则表示匹配内容,只要是.jpg结尾 [root@master-61 ~]#curl 10.0.0.9:22333/yuchaoit/documents/yuchaoit.jpg location ~* \.(gif|jpg|jpeg) [root@master-61 ~]# # 即使前面匹配到了/documents/,但是结尾符合jpg优先级更高 [root@master-61 ~]#curl 10.0.0.9:22333/documents/yuchaoit.jpg location ~* \.(gif|jpg|jpeg) # 除非结尾文件名不符合,因此匹配到/documents/ [root@master-61 ~]#curl 10.0.0.9:22333/documents/yuchaoit.jpgggg location /documents/ [root@master-61 ~]# [root@master-61 ~]# # 证明 ^~ 优先级 大于 ~* [root@master-61 ~]#curl 10.0.0.9:22333/images/yuchaoit.jpgggg location ^~ /images/
5.实际工作使用
实际工作中,会有至少3个匹配规则如下,需要同学们学习了nginx负载均衡即可理解,以及具体的网站部署实践。 # 1.必选规则,设置反向代理,官网也推荐该用法,可以加速处理,因为首页会频繁被访问 # 该location 一般直接设置反向代理,转发给后端应用服务器,或者是静态页; location = / { proxy_pass http://yuchaoit.cn; } # 2.静态文件处理,nginx强项 # 两个模式,二选一即可 # 这个表示当用户请求是 http://yuchaoit.cn/static/hello.css 这样的请求时 # 进入/www目录下,寻找static文件夹, 也就是/www/static/hello.css文件 location ^~ /static/ { root /www/; } # 这个表示请求是以如下静态资源结尾的,进入到/www/下寻找该文件 #匹配任何以.gif结尾的请求,支持正则 location ~* \.(gif|jpg|jpeg|png|css|js|ico)$ { root /www/; } # 3.还有就是通用规则,用于处理未定义的url,默认匹配 # 一般网站除了静态文件的请求,默认就是动态请求,因此直接转发给后端 location / { proxy_pass http://my_django:8080/; }
6. location的root和alias
nginx的location路径匹配功能 1.匹配用户的url 2.匹配到之后决定动作,代理转发,或者设置网页根目录,提供静态数据。 静态页面的设置,就得设置linux中的文件路径,nginx提供了2个参数 root和alias 语法: 1.root是定义最上层目录,目录路径结尾的斜线可有可无; 2.alias是定义目录别名,结尾必须以 "/" 结束,否则找不到文件。
7.root、alias实践。
# 1.例如目前有一个静态数据目录 /static # 静态图片数据如下 [root@web-9 /www]#ls /www/static/cai1.jpg /www/static/cai1.jpg # 2.前端网页html文件 [root@web-9 /www]#cat /www/index.html welcome chaoge linux course. <img src='/static/cai1.jpg'> # 3.nginx测试配置文件(分别测试root、和alias两种写法) [root@web-9 /etc/nginx/conf.d]#cat movie.yuchaoit.conf server { listen 80; server_name movie.yuchaoit.cn; charset utf-8; access_log /var/log/nginx/movie.yuchaoit.log; error_log /var/log/nginx/error.movie.yuchaoit.log; error_page 404 https://error.taobao.com/app/tbhome/common/error.html; location / { root /www; index index.html index.htm; } location /static/ { root /www; } # location /static/ { # alias /www/static/; #} error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } }
8.图解root、alias
标签:实战,documents,匹配,61,nginx,master,location,root From: https://www.cnblogs.com/sxy-blog/p/17463280.html