0

假设我想将部分流量代理到远程后端,而不是服务器上的本地侦听器。例如:

upstream backends {
    server 127.0.0.1:8080 weight=20;  # local process (HTTP)
    server other-remote-backend.company-internal.com:443;  # remote server (HTTPS)
}


location / {
    # ...other stuff...
    proxy_pass http://backends;
}

在上述配置中,每 20 个左右的请求 NGINX 将尝试路由到http://other-remote-backend.company-internal.com:443仅侦听 SSL 的路由。

上游有没有办法定义自己的协议方案?现在,如果不将本地侦听器进程也更改为 SSL,这似乎是不可撤销的(这是一个不太理想的更改)。

谢谢

4

1 回答 1

0

与通常情况一样,我已经发现了自己的问题,而且非常明显。如果您尝试完成上述操作,则技巧非常简单。

  1. 首先创建一个新的 NGINX 虚拟主机,它监听 HTTP 和 proxy_passes 到您的远程 HTTPS 后端,如下所示:

/etc/nginx/sites-available/remote_proxy

upstream remote {
        server other-remote-backend.company-internal.com:443;
}

server {

        # other-remote-backend.company-internal.com:443;

        listen 8181;

        server_name my_original_server_name;

        location / {
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $remote_addr;
            proxy_pass https://remote;
        }

}
  1. 您现在可以http在 443 上侦听的原始配置中仅用于上游:

/etc/nginx/sites-available/default

upstream backends {
    server 127.0.0.1:8080 weight=20;  # local process (HTTP)
    server 127.0.0.1:8181 # local nginx proxying to HTTPS remote
}


location / {
    # ...other stuff...
    proxy_pass http://backends;
}

现在只需启用您的新站点并重新启动 $ ln -s /etc/nginx/sites-available/remote_proxy /etc/nginx/sites-enabled/ && systemctl restart nginx

于 2020-08-11T19:36:49.850 回答