Nginx conf来管理2个ssl端点之间的流量

问题描述

这是设置:
fowarding_proxy-> server_1server_2
server_1-> app1.domain.comapp2.domain.com
server_2-> app3.domain.comapp4.domain.com

每个服务器都在运行带有基于jwilder/nginx-proxy + letsencrypt setupNginx反向代理的docker守护程序。

两台服务器都位于同一路由器的后面,我需要一种基于主机名将流量正确路由到每个路由器的方法。我一直在尝试使用Nginx流模块,因为我不希望转发代理处理任何ssl终止,但是$ssl_preread_name指令不能(似乎)捕获HTTP流量上的主机名,我无法在流模块中的server指令上执行301。解决此问题的最佳方法是什么?

我提供了当前正在使用的配置示例,并尝试了多次迭代。打开任何建议。

(此外,什么都没有登录到access.log)

Forward_proxy Nginx.conf

user  Nginx;
worker_processes  1;

error_log  /var/log/Nginx/error.log warn;
pid        /var/run/Nginx.pid;

events {
    worker_connections  1024;
}

stream {
  # bare bones content,still nothing written to the log.
  log_format main '[$time_local] $remote_addr'
  access_log /var/log/Nginx/access.log main;

  map $ssl_preread_server_name $name {
    app1.domain.com server1;
    app2.domain.com server1;
    app3.domain.com server2;
    app4.domain.com server2;
  }
  
  upstream server1 {
    server server1:80;
  }
  upstream server2 {
    server server1:80;
  }
  upstream server1_ssl {
    server server1:443;
  }
  upstream server2_ssl {
    server server1:443;
  }

  server {
    listen 80;
    proxy_pass $name;
    ssl_preread on;
  }
  
  server {
    listen 443;
    proxy_pass "${name}_ssl";
    ssl_preread on;
  }
}

解决方法

想出一个解决方案,很高兴听到更好的解决方案。

我创建了两个新的Nginx容器,而不是单个转发代理:一个用于HTTP流量,另一个用于HTTPS流量,并将它们都放在一个docker-compose文件中,以便于管理。

HTTP-forwarding-proxy

auto lambda = [](unsigned int param)
{   
    std::bitset<10> bits(param);
    std::cout << "inside lambda bits[8] = " << bits[8] << std::endl; 
    bool b = bits[8];
 // ^^^^^^
    return b;
};

HTTPS-forwarding-proxy

http {
  map $host $name {
    default server1;
    app3.strangedreamsinc.com server2;
    app4.strangedreamsinc.com server2;
  } 

  upstream server1 {
    server server1_ip:8080;
  }

  upstream server2 {
    server server2:8080;
  }

  server {
    listen 80 default_server;
    server_name _;
    location / {
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_pass http://$name;      
    }
  }
}

我不认为没有更好的方法,而且可能有一些我在忽略的事情,但这使我可以透明地将流量路由到正确的反向代理,并且仍然支持letencrypt协议将SSL应用于我的服务器