Nginx conf管理2个ssl和x27;d端点

Nginx conf管理2个ssl和x27;d端点,nginx,nginx-reverse-proxy,nginx-config,Nginx,Nginx Reverse Proxy,Nginx Config,以下是设置: fowarding\u proxy->server\u 1,server\u 2 server\u 1->app1.domain.com,app2.domain.com server_2->app3.domain.com,app4.domain.com 其中,每台服务器都运行一个docker守护程序,该守护程序具有基于的nginx反向代理 两台服务器都位于同一个路由器后面,我需要一种基于主机名将流量正确路由到每台服务器的方法。我一直在尝试使用nginx流模块,因为我不想让转发代理处

以下是设置:
fowarding\u proxy
->
server\u 1
server\u 2

server\u 1
->
app1.domain.com
app2.domain.com

server_2
->
app3.domain.com
app4.domain.com

其中,每台服务器都运行一个docker守护程序,该守护程序具有基于的nginx反向代理

两台服务器都位于同一个路由器后面,我需要一种基于主机名将流量正确路由到每台服务器的方法。我一直在尝试使用nginx流模块,因为我不想让转发代理处理任何ssl终止,但是
$ssl\u preread\u name
指令(似乎)无法捕获http流量上的主机名,并且我无法在流模块中执行
服务器上的301
指令。最好的方法是什么

我已经包括了一个我目前正在使用的配置示例,并且我已经尝试了多次迭代。欢迎任何建议

(另外,顺便说一句,access.log中没有任何日志)

转发代理nginx.conf


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

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

HTTP转发代理

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;      
    }
  }
}
stream {
  map $ssl_preread_server_name $name { 
    default server1;
    app1.strangedreamsinc.com server1;
    app2.strangedreamsinc.com server1;
  }


  upstream server1 {
    server server1_ip:8443;
  }
  upstream server2 {
    server server2_ip:8443;
  }

  server {
    listen 443;
    proxy_pass $name;
    ssl_preread on;
  }
}
HTTPS转发代理

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;      
    }
  }
}
stream {
  map $ssl_preread_server_name $name { 
    default server1;
    app1.strangedreamsinc.com server1;
    app2.strangedreamsinc.com server1;
  }


  upstream server1 {
    server server1_ip:8443;
  }
  upstream server2 {
    server server2_ip:8443;
  }

  server {
    listen 443;
    proxy_pass $name;
    ssl_preread on;
  }
}
我不确信没有更好的方法,也可能有我忽略的地方,但这允许我透明地将流量路由到正确的反向代理,并且仍然支持letsencrypt协议将SSL应用到我的服务器