最近在配置nginx时,需要对某些指令的路径来做处理,最常使用的是 location /web {} 这样的方式,其中 web 中访问的路径,如 http://www.kw360.net/web/jisuan 就包含在内。小编有个需求是需要包含 http://www.kw360.net/web/jisuan,http://www.kw360.net/api/,http://www.kw360.net/print/esc 等这样的也支持,虽说可以用笨一些的方法来直接写死如:location /web {},location /api {},location /print {} 也能实现效果,但是这样显的太笨重了。找了一些文档最后实现了。

ngxin location路径匹配不同开头

匹配以web、print、api开头的配置代码如下:

server {
    listen       80;
    server_name  localhost;
    location ~ /web|print|api/ {
        proxy_pass http://localhost:8080;
        proxy_set_header Host $host;
        proxy_set_header Origin "";
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        client_max_body_size 10m;
    }
}

nginx location指令语法及说明

location [=|~|~*|^~|@] /uri/ { … } 或 location @name { … }

= 开头表示精确匹配; 如: A 中只匹配根目录结尾的请求,后面不能带任何字符串.

^~ 开头表示uri以某个常规字符串开头,不是正则匹配;

~ 开头表示区分大小写的正则匹配;

~* 开头表示不区分大小写的正则匹配;

/ 通用匹配, 如果没有其它匹配,任何请求都会匹配到;

ngxin location路径匹配常用实例

location ~* .(jpg|png|gif|jpeg)$ {
  # 匹配所有以 jpg,png,gif,jpeg 结尾的请求
}

location ~ /web|print|api/ {
  # 匹配所有以 web,print,api开头的请求
}

location  / {
  # 因为所有的地址都以 / 开头,所以这条规则将匹配到所有请求
}

location  = / {
  # 精确匹配 / ,主机名后面不能带任何字符串
}