1

我有一个代理服务器,它通过 https 将通信重定向到客户端的某个 api。当我使用设置上游变量 (proxy_pass $upstream_endpoint$request_uri;) 的配置时,该域的 DNS 解析(动态更改 IP 地址)运行良好,但我得到未经授权的响应 403。

当我使用没有上游(proxy_pass https://api-test.example.com/api/)的配置时,直接指向客户域它运行良好,我收到响应 200,但 DNS 解析器不再工作..

Nginx 配置:

location /api-test.example.com/api/ {
            resolver 10.100.10.1 valid=5s;
            set $upstream_endpoint https://api-test.example.com;
            proxy_pass $upstream_endpoint$request_uri;
            #proxy_pass https://api-test.example.com/api/;
            proxy_ssl_name api-test.example.com;
            proxy_ssl_server_name on;
            proxy_set_header Host api-test.example.com;
            proxy_set_header X-Forwarded-Proto https;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
4

1 回答 1

0

通过向proxy_pass语句添加 URI,请求的 URI 在将其传递到上游之前被重写。有关详细信息,请参阅此文档

所以 URI/api-test.example.com/api/foo被重写为/api/foo.

rewrite...break您可以使用语句实现相同的行为。有关详细信息,请参阅此文档

location /api-test.example.com/api/ {
    rewrite ^/api-test.example.com(.*)$ $1 break;
    set $upstream_endpoint https://api-test.example.com;
    proxy_pass $upstream_endpoint;
    ...
}
于 2018-10-11T08:56:21.433 回答