nginx中配置proxy_pass详解,末尾带不带斜杠/的区别

前言:网上查了很多文章,确实有很多帖子详细列出了四种情况,然后举例子说明它们的区别,我看了几个帖子后依旧很乱,而且没有说明理由,很难记住。我自己经过多次试验,终于弄明白了,其实很简单,只有两种情况。

先上结论,一句话概括为:proxy_pass不带uri直接照搬,带uri则去掉location后拼接到proxy_pass上。听不懂没关系,简短的描述是为了方便记忆,请往下看

其中,/, /api, /api/, /api/user, /api/user/都叫uri,(注意:单个的斜杠/也是uri)。

一、不带uri

server {
  listen  8000;
  server_name  localhost;
  location /api/ {
    proxy_pass  http://localhost:8001;
  }
}

把地址和端口一换,其他照搬。所以请求http://localhost:8000/api/user/login等同于请求http://localhost:8001/api/user/login

二、带uri

server {
  listen  8000;
  server_name  localhost;
  location /api/ {
    proxy_pass  http://localhost:8001/;
    # proxy_pass  http://localhost:8001/user;
    # proxy_pass  http://localhost:8001/user/;
  }
}

请求http://localhost:8000/api/user/login,首先把请求中的uri去掉location,即/api/user/login去掉/api/后得到user/login,然后:

  • user/login拼接到http://localhost:8000/后得http://localhost:8000/user/login
  • user/login拼接到http://localhost:8000/user后得http://localhost:8000/useruser/login
  • user/login拼接到http://localhost:8000/user/后得http://localhost:8000/user/user/login

这三种情况其实适用于同一条规则。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容