Nginx中location proxy_pass 加与不加 / 的区别

一、location 配置

前缀匹配
# 匹配以 /images/ 开头的URI
location /images/ {
    # 相应的处理配置
}
  • 后缀没有/时,location /abc/def可以匹配/abc/defghi请求,也可以匹配/abc/def/ghi
  • 而后缀有/时,location /abc/def/不能匹配/abc/defghi请求,只能匹配/abc/def/anything这样的请求
精确匹配
# 精确匹配仅为 /login 的URI
location = /login {
    # 进行相应的处理
}
正则表达式匹配
# 通过正则匹配形如 /user/123 的URI
location ~ ^/user/\d+ {
    # 进行相应的处理
}
通配符匹配
# 匹配以 .jpg、.png 或 .gif 结尾的URI
location ~* \.(jpg|png|gif)$ {
    # 进行相应的处理
}

使用 ~* 进行正则表达式匹配时,表示对请求的 URI 不区分大小写进行匹配

二、proxy_pass 配置

不加后缀 “/”
location /api {
    # 代理仅替换 schema://ip:port
    proxy_pass http://backend_server;
}

在这种情况下,如果原始请求的 URI 是 /api/foo,Nginx 代理会将请求转发到 http://backend_server/api/foo。Nginx 不会修改原始请求的 URI,而是将其完整地传递给后端服务器。

加上后缀 “/”
location /api {
    # 代理替换整个前缀,包括location匹配使用的前缀。即 schema://ip:port/[location pattern]
    proxy_pass http://backend_server/;
}

在这种情况下,如果原始请求的 URI 是 /api/foo,Nginx 代理会将请求转发到 http://backend_server/foo。Nginx 会将原始请求的 URI 中location前缀 的部分去除,并将剩余部分追加到 proxy_pass 指令中配置的后端服务器地址后面。

当location为正则表达式时,proxy_pass的末尾不能带/,否则会报错如下

nginx: [emerg] “proxy_pass” cannot have URI part in location given by regular expression, or inside named location, or inside “if” statement, or inside “limit_except” block in xxx.conf
  • 11
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值