gpt4 book ai didi

variables - NGINX - 在 proxy_pass 中使用变量会破坏路由

转载 作者:行者123 更新时间:2023-12-03 15:07:13 33 4
gpt4 key购买 nike

我试图让 NGINX 的解析器自动更新 DNS 解析缓存,所以我正在过渡到使用变量作为 proxy_pass实现这一目标的值(value)。但是,当我确实使用变量时,它会使所有请求都转到请求的根端点并切断 url 的任何其他路径。这是我的配置:

resolver 10.0.0.2 valid=10s;

server {
listen 80;
server_name localhost;

location /api/test-service/ {
proxy_redirect off;

proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

# If these 2 lines are uncommented, 'http://example.com/api/test-service/test' goes to 'http://example.com/api/test-service/'
set $pass_url http://test-microservice.example.com:80/;
proxy_pass $pass_url;

# If this line is uncommented, things work as expected. 'http://example.com/api/test-service/test' goes to 'http://example.com/api/test-service/test'
# proxy_pass http://test-microservice.example.com:80/;

}

这对我来说没有任何意义,因为硬编码的 URL 和变量的值是相同的。有什么我想念的吗?

编辑:啊,所以我发现了这个问题。但我不完全确定如何处理它。由于这是一个反向代理,我需要 proxy_pass删除 /api/test-service/在将 URI 传递给代理之前从 URI 开始。所以..

这个:
http://example.com/api/test-service/test

应该代理这个:
http://test-microservice.example.com:80/test

而是代理这个:
http://test-microservice.example.com:80/api/test-service/test

当我不使用变量时,它丢弃它没问题。但是变量添加了它。这只是使用变量的本质吗?

最佳答案

您在文档中遗漏了一个小点

When variables are used in proxy_pass:

location /name/ {
proxy_pass http://127.0.0.1$request_uri;
}

In this case, if URI is specified in the directive, it is passed to the server as is, replacing the original request URI.



所以你的配置需要更改为
set $pass_url http://test-microservice.example.com:80$request_uri;
proxy_pass $pass_url;

关于variables - NGINX - 在 proxy_pass 中使用变量会破坏路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46230270/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com