44人参与 • 2025-04-08 • MsSqlserver
我来详细解释 location
和 proxy_pass
的作用以及它们在你的例子中的含义。
location
是 nginx 中用来匹配客户端请求 uri 的指令,决定如何处理特定路径的请求。它定义了请求的路由规则,后续的配置(如 proxy_pass
)会应用在匹配的请求上。
location [修饰符] 匹配模式 { # 配置块 }
=
(精确匹配)、~
(正则匹配)等。location /test { proxy_pass http://abc.com; }
/test
开头时,这个 location
块会被匹配。http://yourdomain.com/test
或 http://yourdomain.com/test/abc
都会进入这个块。/test
部分)传递给后端,除非 proxy_pass
有特殊配置。proxy_pass
指定将请求代理到的后端服务器地址(可以是域名、ip 或上游服务器组)。它定义了请求的目标。
proxy_pass 协议://目标地址;
location /test { proxy_pass http://abc.com/tt; }
location /test
的请求转发到 http://abc.com/tt
。让我解释这俩组合起来的效果:
location /test { proxy_pass http://abc.com/tt; }
http://yourdomain.com/test/abc
http://abc.com/tt/abc
location /test
匹配请求的 /test
前缀。/test
后面的部分(/abc
)保留下来。proxy_pass http://abc.com/tt
指定目标地址为 http://abc.com/tt
,并把剩余路径(/abc
)追加到后面。http://abc.com/tt/abc
。如果在 proxy_pass
后加斜杠:
location /test { proxy_pass http://abc.com/tt/; }
http://yourdomain.com/test/abc
http://abc.com/tt/abc
/
后,nginx 不会把 location
的 /test
部分替换掉,而是直接把请求的剩余路径(/abc
)追加到 http://abc.com/tt/
后面。location /test { proxy_pass http://abc.com; }
http://yourdomain.com/test/abc
http://abc.com/test/abc
proxy_pass
没有指定具体路径(只有域名),nginx 会把客户端的完整 uri(/test/abc
)直接传递给后端。location = /test { proxy_pass http://abc.com/tt; }
http://yourdomain.com/test
,不会匹配 /test/abc
。http://abc.com/tt
(不带额外路径)。location /test/ { proxy_pass http://abc.com/; }
http://yourdomain.com/test/abc
转发到 http://abc.com/abc
。/test/
被去掉,只保留后面的部分。location ~ ^/test/(.*)$ { proxy_pass http://abc.com/tt/$1; }
http://yourdomain.com/test/abc
转发到 http://abc.com/tt/abc
。$1
动态传递路径。location /test
:匹配以 /test
开头的请求。proxy_pass http://abc.com/tt
:将请求转发到 abc.com/tt
,默认保留 /test
后的路径并追加到 /tt
后。/
)、是否用正则,会影响路径的传递方式。到此这篇关于nginx `location` 和 `proxy_pass`的匹配规则的文章就介绍到这了,更多相关nginx location 和 proxy_pass匹配规则内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论