使用NGINX上游,是否可以在同一上游将代理传递给HTTP和HTTPS后端?

问题描述

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

repository.save(someEntity);

在上述配置中,每20个左右的请求,Nginx就会尝试将其路由到仅监听SSL的id=1

上游是否可以定义自己的协议方案?现在,在不将本地侦听器进程也更改为SSL的情况下,这似乎是不可撤消的(这是不太理想的更改)。

谢谢

解决方法

和通常的情况一样,我已经弄清楚了自己的问题,而且很明显。如果您要完成上述操作,则技巧很简单。

  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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...