如何代理从 url 路径传递到不同 dns 服务器上的不同子域?

问题描述

假设我在一台服务器上有我的主域,而在另一台服务器上有一个子域。

这两个地址都使用 Cloudflare DNS 访问不同的 IP 地址,因此:

example.com => ip1

new.example.com => ip2

现在我想将 example.com 上的某个路径 proxy_pass 到 new.example.com 而不更改 url,所以:

example.com/something 应该显示 new.example.com/somethingElse

内容

这些是我的 Nginx 配置文件,问题是如果我将 example.com/something 指向 google.com 或什至我托管用于测试的 ngrok 服务器,一切正常,但是当我指向它时到 new.example.com/something 它给了我 502 错误,所以我猜我的 new.example.com 配置有问题。

example.com 配置:

server {

        listen 443 ssl http2;
        listen [::]:443 ssl http2;

        ssl     on;
        ssl_certificate         /etc/letsencrypt/live/cert.pem;
        ssl_certificate_key     /etc/letsencrypt/live/key.pem;

        server_name example.com www.example.com;
        resolver 8.8.8.8;

        location = /something {
                proxy_set_header X-Forwarded-Host  new.example.com;
                proxy_set_header Host              new.example.com;
                proxy_pass https://new.example.com/somethingElse;
        }
}

new.example.com 配置:

server {
  listen 443;

  server_name www.new.example.com new.example.com;

  ssl_certificate         /etc/ssl/private/cert.pem;
  ssl_certificate_key     /etc/ssl/private/key.pem;

  location / {
      proxy_pass         http://container-name:80;
      proxy_redirect off;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }
}

解决方法

请测试服务器之间的连通性。登录到 example.com 服务器并向 new.example.com 服务发送 CURL 请求。 看起来 example.com 服务器无法访问 new.example.com 服务器。 请检查nginx服务日志。

满足您要求的另一种选择是 cloudflare 工作器服务。