【问题标题】:Nginx domain resolving issueNginx 域名解析问题
【发布时间】:2019-03-16 05:55:24
【问题描述】:

我有一个代理服务器,它通过 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;

【问题讨论】:

  • $request_uri/api/ 不一样 - 你错过了重写吗?
  • 嗨 Richard 是的 $request_uri 与 /api/ 相同,您的意思是应该设置为 $upstream_endpoint api-test.domain.com/api; proxy_pass $upstream_endpoint;
  • 不,我的意思是$request_uri 的值等于/api-test.domain.com/api/ 而不是/api/
  • 它可能的问题。我应该如何修复它?只需从 proxy_pass $upstream_endpoint$request_uri 中删除;最终应该是:proxy_pass $upstream_endpoint; ??

标签: nginx dns proxypass upstream-branch


【解决方案1】:

通过将 URI 添加到 proxy_pass 语句,请求的 URI 在将其传递到上游之前被重写。详情请见this docuement

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

您可以使用rewrite...break 语句实现相同的行为。详情请见this document

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;
    ...
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-13
    • 2013-01-22
    • 1970-01-01
    • 2021-03-24
    • 2021-04-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多