配置静态资源或反向代理时,都需要用到location
属性,这里以/app
为例,介绍下location常见的转写URL规则。
前缀匹配最为常用,一个简单的例子如下:
location /app {
proxy_pass http://127.0.0.1:8080/;
}
该配置代表前缀匹配,例如/appa
、/app/a
都能够匹配转发。要注意,/appa
会被转发到后端请求路径/a
。
如果有多个前缀匹配,会匹配较长的那个配置。
location = /app {
proxy_pass http://127.0.0.1:8080/;
}
该配置表示精确匹配/app
路径,/appa
、/app/a
这种路径均不会被转发,但是类似/app?id=1
则可以。
location ~ \.php$ {
proxy_pass http://127.0.0.1;
}
这里给出Nginx中默认对PHP的配置,~
开头表示后面跟着一个区分大小写的正则表达式,\.php$
表示匹配类似index.php
、/pages/user.php
这样的请求。如果不希望正则区分大小写,可以使用~*
开头。
如果有多个匹配规则,正则匹配总是先于默认的前缀匹配执行。
注意:使用正则匹配时,proxy_pass
中不能使用路径分隔符/
,也就是说,对于前面的例子,假如你写了一个正则表达式/app.*
,你就没法把对/app
的请求转为对后台应用服务器的/
请求了。
location / {
proxy_pass http://127.0.0.1:8080;
}
默认匹配其实就是一个最短的前缀匹配,如果有多个匹配规则,它会在其它匹配规则都不符合时执行。