nginx location URI /

location & proxy_pass 后面的 /


  1. location 中的字符有没有 / 都没有影响。也就是说 /user/ 和 /user 是一样的

  2. 如果 URI 结构是 https://domain.com/ 的形式,尾部有没有 / 都不会造成重定向。因为浏览器在发起请求的时候,默认加上了 /

  3. 如果 URI 的结构是 https://domain.com/some-dir/ 。尾部如果缺少 / 将导致重定向。因为根据约定,URL 尾部的 / 表示目录,没有 / 表示文件。所以访问 /some-dir/ 时,服务器会自动去该目录下找对应的默认文件。如果访问 /some-dir 的话,服务器会先去找 some-dir 文件,找不到的话会将 some-dir 当成目录,重定向到 /some-dir/ ,去该目录下找默认文件。可以去测试一下你的网站是不是这样的

实际案例

  1. location和proxy_pass都带/,则请求的真实地址不带location的URI

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

    www.test.com/api/upload-->http://127.0.0.1:8080/upload

  2. location不带/,proxy_pass带/,则真实地址会带/

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

    访问地址: www.test.com/api/upload-->http://127.0.0.1:8080//upload

  3. location带/,proxy_pass不带/,则真实地址会带location匹配目录/api/

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

    访问地址: www.test.com/api/upload-->http://127.0.0.1:8080/api/upload

  4. location和proxy_pass都不带/,则真实地址会带location匹配目录/api/

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

    访问地址: www.test.com/api/upload-->http://127.0.0.1:8080/api/upload

  5. location与proxy_pass后面的URI都带/

    location /api/ {
        proxy_pass http://127.0.0.1:8080/server/;
    }

    访问地址: www.test.com/api/upload-->http://127.0.0.1:8080/server/upload

  6. location带地址但不带/,proxy_pass带地址加/

    location /api {
        proxy_pass http://127.0.0.1:8080/server/;
    }

    访问地址: www.test.com/api/upload-->http://127.0.0.1:8080/server//upload

  7. location带地址加/,proxy_pass带地址不加/

    location /api/ {
        proxy_pass http://127.0.0.1:8080/server;
    }

    访问地址: www.test.com/api/upload-->http://127.0.0.1:8080/serverupload

  8. location与proxy_pass带地址都不带/

    location /api {
        proxy_pass http://127.0.0.1:8080/server;
    }

    访问地址: www.test.com/api/upload-->​​​​​​​http://127.0.0.1:8080/server/upload

参考文献


(8条消息) nginx location / 区别_捧一束阳光.的博客-CSDN博客

posted @ 2022-08-21 22:36  MacoPlus  阅读(141)  评论(0编辑  收藏  举报