推广 热搜: 后台  帝国cms  DESTOON  位置  网站  帝国cms建站  Wordpress教程  MAC系统  内容  destoon模板 

nginx配置文件中location详解

   日期:2022-12-26     来源:东坡网    浏览:42    违规举报
 
  • nginx是一个开源的,支持高性能,高并发的www服务和代理服务软件。
  • nginx因具有高并发(特别是静态资源),占用系统资源少等特性,且功能丰富而逐渐流行起来。
  • nginx不但是一个优秀Web服务软件,还具有反向代理负载均衡功能和缓存服务功能,与lvs负载均衡及Haproxy等专业代理软件相比,Nginx部署起来更为简单,方便;在缓存功能方面,它又类似于Squid等专业的缓存服务软件。

本文章主要介绍nginx配置文件中location详解

Syntax:	location [ = | ~ | ~* | ^~ ] uri { ... }
location @name { ... }
Default:	—
Context:	server, location

1 、[] 表示可选,可以不要。依据不同的前缀“= ”,“^~ ”,“~ ”,“~* ”和不带任何前缀,表达不同的含义。

2 、查询字符串不在URI范围内。例如:/films.htm?fid=123 的URI 是/films.htm

3、不同前缀,分2大类,正则location 和 普通location。

(1)“~ ”和“~* ”前缀表示正则location , “~ ”区分大小写,“~* ”不区分大小写

(2)其它前缀,包括“=”、“^~ ”和“@ ”,以及无任何前缀的都属于普通location

4、对于一个特定的 HTTP 请求,nginx先匹配普通location 再匹配 正则location

普通location 匹配只是临时结果,nginx 还需要继续检查正则location 。如果正则location匹配成功,临时结果将被覆盖,否则最后结果是之前匹配的临时结果。

5、普通location内部的匹配原则是 最大前缀匹配

例如: location /prefix/mid/ {} 和 location /prefix/ {} ,,对于HTTP 请求/prefix/mid/index.html 会匹配 location /prefix/mid/ {}

6、匹配普通location 后 阻止匹配 正则location 的方法是前面加符号 “^~ ”

^ 表示“非”,~ 表示“正则”,“^~ ”字符意思是:不要继续匹配正则

7、加“= ”可以阻止正则匹配,“= ”表示 严格精确匹配

例子1:先普通location ,再正则location

假设 nginx 的配置如下:

server {
       listen       80;
       server_name  localhost;

       # 普通 location 以“ / ”开始的 URI 请求,所有的请求都能被匹配上
       location / { 
           root   html;
           index  index.html;
           deny all; #拒绝访问
       }
       # 以 .html 结尾的 URI 请求
	   location ~ \.html$ {
           allow all; #允许访问
       }
	   # 精确匹配
	   location /a/1.html {
           allow all;
       }
}

测试和结果:

127.0.0.1/				403 Forbidden	匹配普通location
127.0.0.1/index.html	200 ok			匹配正则location		
127.0.0.1/abc.html		404 Not Found	匹配正则location
127.0.0.1/a/1.html		200 ok			匹配普通location的精确匹配

例2:正则匹配

server {
       listen       80;
       server_name  localhost;
	   # 以 /p/ 开头,.html 结尾的所有 URI 请求
       location ~ ^/p/.*\.html$ {
           deny all;  
       }
	   # .html 结尾的所有 URI 请求
       location ~ \.html$ {
           allow all; 
       }
	   # 以 /a/ 开头,.html 结尾的所有 URI 请求,本设置无效
       location ~ ^/a/.*\.html$ {
           deny all;  
       }
}

测试和结果:

127.0.0.1/c.html	404 Not Found	匹配第二个location
127.0.0.1/p/1.html	403 Forbidden	匹配第一个location
127.0.0.1/a/1.html	404 Not Found	匹配第二个location

例3:“@” 前缀 Named Location

假设配置如下:

server {
       listen       80;
       server_name  localhost;

       location  / {
           root   html;
           index  index.html index.htm;
           allow all;

       }
       # 设置404页面
       error_page 404 = @fallback;
	   # 请求代理到 baidu.com
       location @fallback {
           proxy_pass https://www.baidu.com;
       }
}
免责声明:
1、本站所收集的部分公开资料来源于互联网,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。
2、本站部分作品内容是由网友自主投稿和发布、编辑整理上传,对此类内容本站仅提供交流平台,不为其版权负责,更不为其观点承担任何责任。
3、因行业及专业性有限,故未能核验会员发布内容的真实性及有效性,不为其负责,如有虚假或违规内容敬请准备材料图片发邮件到info@n360.cn举报,本站核实后积极配合删除。
4、如果您发现网站上有侵犯您的知识产权的作品,请与我们取得联系,我们会及时处理或删除。
 
打赏
 
更多>同类网站技术
0相关评论

推荐图文
推荐网站技术
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  免责声明  |  版权隐私  |  信息发布规则  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  粤ICP备2020081222号
Powered By DESTOON