【问题标题】:Nginx conf to manage traffic between 2 ssl'd endpointsNginx conf 管理 2 个 ssl 端点之间的流量
【发布时间】:2020-09-13 23:06:30
【问题描述】:

设置如下:
fowarding_proxy -> server_1, server_2
server_1 -> app1.domain.com, app2.domain.com
server_2 -> app3.domain.com, @ 987654330@

每台服务器都运行一个 docker 守护进程,该守护进程带有一个基于 jwilder/nginx-proxy + letsencrypt setup 的 nginx 反向代理。

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

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

(另外,顺便说一句,nothing 记录到 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 nginx-reverse-proxy nginx-config


    【解决方案1】:

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

    我创建了两个新的 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;      
        }
      }
    }
    

    HTTPS 转发代理

    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;
      }
    }
    

    我不相信没有更好的方法,而且我可能忽略了一些东西,但这允许我透明地将流量路由到正确的反向代理,并且仍然支持 letencrypt 协议以将 SSL 应用于我的服务器.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-05
      • 2015-10-29
      • 1970-01-01
      • 1970-01-01
      • 2019-12-21
      • 1970-01-01
      • 2013-02-05
      相关资源
      最近更新 更多