Nginx 中 location 和 proxy_pass 的斜杠问题

这篇具有很好参考价值的文章主要介绍了Nginx 中 location 和 proxy_pass 的斜杠问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

location 的斜杠问题比较好理解,不带斜杠的是模糊匹配。例如:

location /doc

  • 可以匹配 /doc/index.html,也可以匹配 /docs/index.html。

location /doc/     强烈建议使用这种

  • 只能匹配 /doc/index.html,不能匹配 /docs/index.html。

  对于 proxy_pass 的斜杠问题,得结合 location 来讲。 

(1)proxy_pass 不带URL方式


 这种 IP、端口后面没有 /,是不带 URI 的方式nginx 会保留 location 中的路径。所以,访问 http://127.0.0.1/docs/,实际上访问的是 http://127.0.0.1:8080/docs/。

访问  http://127.0.0.1/docs/  ----------------------------> 实际访问  http://127.0.0.1:8080/docs/

location /docs/ {
    proxy_pass http://127.0.0.1:8080;
}

Nginx 中 location 和 proxy_pass 的斜杠问题,Nginx,nginx

        location /jenkins/ {
            proxy_set_header host $host;
            proxy_pass http://192.168.11.128:8080;
         }

tomcat日志
192.168.11.128 - - [04/Jun/2023:07:50:59 +0800] "GET /jenkins/index.html HTTP/1.0" 404 648

(2)proxy_pass 带 URI 的方式


这种 IP、端口后面有 /,是带 URI 的方式nginx 将会使用别名的方式来对 URL 进行替换。所以,访问 http://127.0.0.1/docs/,实际上访问的是 http://127.0.0.1:8080/,/docs/ 替换成了 /。

访问 http://127.0.0.1/docs/   -------------> 实际访问 http://127.0.0.1:8080/

location /docs/ {
    proxy_pass http://127.0.0.1:8080/;
}
        location /article/ {
            proxy_set_header host $host;
            proxy_pass http://192.168.11.128:8080/;
         }

Nginx 中 location 和 proxy_pass 的斜杠问题,Nginx,nginx

后端tomcat日志

192.168.11.128 - - [04/Jun/2023:08:08:56 +0800] "GET /index.html HTTP/1.0" 404 648

 对带 URI 的方式进行扩展:

location /article/ {
    proxy_pass http://127.0.0.1:8080/docs/;
}

这种同样 IP、端口后面有 /,也是带 URI 的方式。所以,访问 http://127.0.0.1/article/,实际上访问的是 http://127.0.0.1:8080/docs/,/article/ 替换成了 /docs/。 

 举例如下:

        location /article/ {
            proxy_set_header host $host;
            proxy_pass http://192.168.11.128:8080/docs/;
         }

Nginx 中 location 和 proxy_pass 的斜杠问题,Nginx,nginx

192.168.11.128 - - [04/Jun/2023:08:00:26 +0800] "GET /docs/index.html HTTP/1.0" 404 648

Nginx 中 location 和 proxy_pass 的斜杠问题,Nginx,nginx

 经常出错的也正是这种带 URI 方式的写法 !!!!!


例如:

location /article/ {
    proxy_pass http://127.0.0.1:8080/docs;
}

当访问 http://127.0.0.1/article/index.html 的时候,本意是想访问 http://127.0.0.1:8080/docs/index.html。但是,/article/ 替换成了 /docs,所以,实际访问的是 http://127.0.0.1:8080/docsindex.html。

例如:

Nginx 中 location 和 proxy_pass 的斜杠问题,Nginx,nginx

匹配模式

分为两种模式:

  • 绝对匹配:调用的请求Path固定为创建时填写的API请求Path。
  • 前缀匹配:调用的请求Path将以创建时填写的API请求Path为前缀,支持接口定义多个不同Path。

    例如,请求路径为/test/AA,使用前缀匹配时,通过/test/AA/CC可以访问,但是通过/test/AACC无法访问。

Nginx 中 location 和 proxy_pass 的斜杠问题,Nginx,nginx

说明:

使用前缀匹配时,匹配剩余的路径将透传到后端。

例如,使用前缀匹配,前端请求路径定义为/test/,后端请求路径定义为/test2/,通过/test/AA/CC访问API,则后端收到的请求url为/test2/AA/CC。文章来源地址https://www.toymoban.com/news/detail-707256.html

到了这里,关于Nginx 中 location 和 proxy_pass 的斜杠问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux中Nginx的HTTP和HTTPS常用配置以及proxy_pass详解

    如果出现 (configure arguments: --with-http_ssl_module), 则已安装(下面的步骤可以跳过,直接进行 第3步 )。 解压缩下载好的证书(证书一般是pem文件和key文件,这里名字可以随便改) 将下载好的证书上上传到服务器,我将证书放在了root目录下的card文件夹 配置如下:

    2024年02月01日
    浏览(44)
  • nginx 常用配置之 pass_proxy

    大家好,我是 17。 今天和大家聊聊 pass_proxy 代理。 在前端代理主要是为了跨域。虽然前端跨域有多种方法,各有利弊,但用代理来跨域对开发是最友好的。用代理可以不用修改产品代码切换线上线下,非常安全。pass_proxy 默认会把 cookie 也一同转发。 常用的配置非常简单。

    2024年02月13日
    浏览(30)
  • vue项目跨域问题(图片跨域)devServer.proxy代理失效时,nginx反向代理解决跨域问题

    ​ 本篇文章主要记录个人在公司项目开发中所遇问题,主要内容:在vue项目的开发中图片所存的服务器/端口号和项目所在的服务器/端口号不同,出现了跨域问题的保错。 ​ 如果文章有歧义,请各位大佬指出,避免误导更多的人!! Bug起因 ​ 在vue项目的开发中图片所存的

    2024年02月15日
    浏览(32)
  • 【nginx】nginx之location规则详解:

    一、语法规则: 二、优先级: 三、验证: 1、精确匹配: 在conf.d文件夹下创建配置文件test.com.conf,内容如下: 上图中第一个和第二个location匹配条件一样,都是/test.html,但第二个为精准匹配到静态路径,因此第一个不会执行,会执行第二个,www.test.com为本地域名解析,ac

    2024年02月15日
    浏览(33)
  • 【Nginx06】Nginx学习:HTTP核心模块(三)Location

    Location 是整个 HTTP 模块中非常重要的一个子模块,它是为某个请求URI(路径)建立配置。这个模块又是属于 Server 模块的子模块,同时它还可以嵌套在另一个 Location 模块下面,因此,它的作用范围是 server 和 location 。其实,说白了,也就是我们可以为指定的一些路径去做一些

    2024年02月15日
    浏览(32)
  • Nginx location

    location块是nginx配置文件中,配置在http块中的server块中,匹配的是uri location匹配uri的方式 : 精确匹配: location = /[ ...} 正则匹配: location - /{ ...} 一般匹配: location /{ ....} 匹配的规则: = :精确匹配,完全匹配,错一个字都匹配到,必须完全一致。 ^~ : 匹配普通字符,前缀匹配

    2024年02月14日
    浏览(27)
  • nginx之location的优先级和nginx的重定向

    nginx的正则表达式 符号 含义 ^ 字符串的起始位置(以什么开头) $ 字符串的结束位置(以什么结尾) * 匹配所有 + 匹配前面的字符最少1次 ? 匹配前面的字符0次或者1次 . 任意单个字符 {n} 连续重复出现n次 {n,m} 连续重复n-m次 [c] 匹配单个字符c () 分组 | 或 1、精确匹配:完整路

    2024年02月03日
    浏览(30)
  • Nginx Location 基本配置

    基本语法格式: 1.等于匹配符:= 等于匹配符就是等号,特点可以概括为两点: 精确匹配,优先级最高,匹配成功后则停止向下搜索 不支持正则表达式 2.空匹配符 空匹配符的特点是: 匹配以指定模式开始的 URI,区分大小写,字符串匹配 不支持正则表达式 3.正则匹配符:~

    2024年02月08日
    浏览(40)
  • Nginx扩展篇之Location语法规则

    语法规则: location [=| | *|^~] /uri/ {… } 首先匹配 =,其次匹配^~,其次是按文件中顺序的正则匹配,最后是交给 /通用匹配。当有匹配成功时候,停止匹配,按当前匹配规则处理请求。 符号 含义 = = 开头表示精确匹配 ^~ ^~开头表示uri以某个常规字符串开头,理解为匹配 url路径即

    2024年02月08日
    浏览(35)
  • Nginx重写功能location与rewrite

    从功能看 rewrite 和 location 似乎有点像,都能实现跳转,主要区别在于 rewrite 是在同一域名内更改获取资源的路径,而 location 是对一类路径做控制访问或反向代理,还可以proxy_pass 到其他机器。 rewrite 对访问的域名或者域名内的URL路径地址重写。 location 对访问的路径做访问控

    2024年01月20日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包