本文共 1764 字,大约阅读时间需要 5 分钟。
location介绍
location指令是Nginx中最核心的一项配置,根据预先定义的URL匹配规则来接收用户发送的请求,根据匹配结果,将请求转发到后台服务器、非法的请求直接拒绝并返回403,404,500错误处理等。location指令语法
location [=|~|~*|^~|@] /uri/ { … } 或 location @name { … }location的URI匹配模式
location指令分为两种匹配模式: 1. 普通字符串匹配:“=”,“^~ ”和“@ ” 和无任何前缀的属于普通location,其中 “ ^~ ”的意思是“非正则,不需要继续正则匹配”。 2. 正则匹配:以~或~*开头表示正则匹配,~*表示正则不区分大小写。匹配规则
①精确匹配 = ②前缀匹配 ^~ ③按文件中顺序的正则匹配 ④匹配不带任何修饰的前缀匹配。 ⑤交给 / 通用匹配 当有匹配成功时候,停止匹配,按当前匹配规则处理请求匹配实例
location = / { echo “规则A”; } location = /login { echo “规则B”; } location ^~ /static/ { echo “规则C”; } location ^~ /static/files { echo “规则X”; } location ~ \.(gif|jpg|png|js|css)$ { echo “规则D”; } location ~* \.png$ { echo “规则E”; } location /img { echo “规则Y”; } location / { echo “规则F”; }
那么产生的效果如下:
访问根目录/,比如http://localhost/将匹配规则A。 访问http://localhost/login将匹配规则B,http://localhost/register则匹配规则F。 访问http://localhost/static/a.html将匹配规则C。 访问http://localhost/static/files/a.exe将匹配规则X,虽然规则C也能匹配到,但因为最大匹配原则,最终选中了规则X。可以测试下,去掉规则X,则当前URL会匹配上规则C。 访问http://localhost/a.gif,http://localhost/b.jpg将匹配规则D和规则E,但是规则D顺序优先,规则E不起作用,而http://localhost/static/c.png则优先匹配到规则C。 访问http://localhost/a.PNG则匹配规则E,而不会匹配规则D,因为规则E不区分大小写。 访问http://localhost/img/a.gif会匹配上规则D,虽然规则Y也可以匹配上,但是因为正则匹配优先,而忽略了规则Y。 访问http://localhost/img/a.tiff会匹配上规则Y。 访问http://localhost/category/id/1111则最终匹配到规则F,因为以上规则都不匹配,这个时候应该是Nginx转发请求给后端应用服务器,比如 FastCGI(php),tomcat(jsp),Nginx 作为反向代理服务器存在。SO实际应用就有三种常见的情况,如下:
# 直接匹配网站根,通过域名访问网站首页比较频繁,使用这个会加速处理,第一个必选规则 location = / { proxy_pass http://tomcat:8080/index }# 第二个必选规则是处理静态文件请求,这是 nginx作为http服务器的强项,有两种配置模式,目录匹配或后缀匹配,任选其一或搭配使用(动静分离的原理步骤)
location ^~ /static/ { root /webroot/static/; } location ~* \.(gif|jpg|jpeg|png|css|js|ico)$ { root /webroot/res/; }# 第三个规则就是通用规则,用来转发动态请求到后端应用服务器
location / { proxy_pass http://tomcat:8080/ }location的原理图
转载地址:http://pvcpa.baihongyu.com/