当前位置: 首页 > Linux

Nginx配置中一个不起眼的字符“-”,却有着巨大的作用,却是千里

时间:2023-04-07 00:25:53 Linux

Nginx是一款轻量级、高性能的web服务软件,因为占用内存小,并发能力强,而广受欢迎并使用。国内很多大型互联网公司也看好Nginx。像BAT(百度、阿里、腾讯),TMD(今日头条、美团、滴滴)等等。用过Nginx的同学都知道,只需要根据自己的需要更改配置并启动,就可以优雅的访问了。那么Nginx对于配置文件是非常看中的,这就需要我们在更改配置文件的时候再三确认,否则可能因为疏忽造成悲剧?真实案例中,收到投诉是因为配置时少了一个“/”字符,导致访问失败报错。那么是什么原因造成的呢?原因是:Nginx配置proxy_pass代理传输时,“/”字符少了。有同学会有疑问,加不加“/”,差别真的有那么大吗?带着这个疑问,我们探讨这个问题。location目录匹配详解nginx中的每一个location都是一个匹配的目录。nginx的策略是:当有访问请求过来时,会解析访问地址,从上到下逐一匹配,匹配上对应位置大括号执行策略。并根据策略响应请求。以访问地址:http://www.wandouduoduo.com/w...,nginx配置如下:location/wddd/{proxy_connect_timeout18000;##修改成半个小时proxy_send_timeout18000;proxy_read_timeout18000;proxy_passhttp://127.0.0.1:8080;然后在访问的时候会匹配这个location,从而将请求代理转发给本地的8080Tomcat服务。Tomcat响应后,信息会通过相同的路由返回。总结:如果location中没有“/”,请求可以模糊匹配所有以该字符串开头的字符串,但是当有“/”时,只能精确匹配字符本身。下面举例说明:配置位置/wandou可以匹配/wandoudouduo请求,也可以匹配/wandou*/duoduo等,只要匹配wandou开头的??目录即可。位置/wandou/必须与/wandou/目录的请求完全匹配,不能与/wandouduoduo/或/wandou*/duoduo的请求匹配。proxy_pass带或不带“/”四种区别探究访问地址是:http://www.wandouduoduo.com/w...为例。所有请求匹配目录/wddd/第一种:加“/”location/wddd/{proxy_passhttp://127.0.0.1:8080/;}测试结果,请求被代理重定向:http://127.0.0.1:8080/index.html第二种:不加“/”location/wddd/{proxy_passhttp://127.0.0.1:8080;}测试结果,请求重定向到:http://127.0.0.1:8080/wddd/index.html第三种:添加目录加“/”位置/wddd/{proxy_passhttp://127.0.0.1:8080/sun/;}测试结果,请求重定向到:http://127.0.0.1:8080/sun/index.html第四:添加目录不加“/”location/wddd/{proxy_passhttp://127.0.0.1:8080/sun;}测试结果,请求被重定向到:http://127.0.0.1:8080/sunindex.html总结一下,location目录后加“/”只能匹配目录,不加“/”既可以匹配目录又可以对目录进行模糊匹配。不管proxy_pass是否加“/”,直接拼接代理跳转地址。为了加深印象,可以使用如下配置实验测试:server{listen80;服务器名称本地主机;#http://localhost/wddd01/xxx->http://localhost:8080/wddd01/xxxlocation/wddd01/{proxy_passhttp://localhost:8080;}#http://localhost/wddd02/xxx->http://localhost:8080/xxxlocation/wddd02/{proxy_passhttp://localhost:8080/;}#http://localhost/wddd03/xxx->http://localhost:8080/wddd03*/xxxlocation/wddd03{proxy_passhttp://localhost:8080;}#http://localhost/wddd04/xxx->http://localhost:8080//xxx,请注意这里的双斜杠,仔细分析。location/wddd04{proxy_passhttp://localhost:8080/;}#http://localhost/wddd05/xxx->http://localhost:8080/hahaxxx,注意这里haha和xxx之间没有斜杠,分析原因。location/wddd05/{proxy_passhttp://localhost:8080/haha;}#http://localhost/wddd06/xxx->http://localhost:8080/haha/xxxlocation/wddd06/{proxy_passhttp://localhost:8080/haha/;}#http://localhost/wddd07/xxx->http://localhost:8080/haha/xxxlocation/wddd07{proxy_passhttp://localhost:8080/haha;}#http://localhost/wddd08/xxx->http://localhost:8080/haha//xxx,注意这里的双斜杠。location/wddd08{proxy_passhttp://localhost:8080/haha/;}}看到这里,是不是觉得有点不一样了??每个配置都有其不同的含义和区别。惊人的!墙裂推荐这款网页版的Nginx配置生成器,太好用了!如果本文对您有帮助,欢迎点击观看转发,分享支持一波。