使用nginx ssl直通的反向代理

使用nginx ssl直通的反向代理,nginx,stream,reverse-proxy,nginx-reverse-proxy,pass-through,Nginx,Stream,Reverse Proxy,Nginx Reverse Proxy,Pass Through,我有几个ISS web服务器,在每个IIS服务器上托管多个web应用程序。 每个系统上都有一个公共证书。 每个IIS都有一个唯一的IP。 所有IIS服务器都放在同一个DMZ中 我已经在另一个DMZ中设置了nginx系统。 我的目标是,让nginx处理来自Internet的所有对IIS的请求,并将所有SSL和证书检查传递给IIS。就像nginx之前一样。我不想让nginx破坏证书,或者卸载证书等等 在我尝试使用nginx反向代理完成之前(因为我对nginx不太熟悉),我的问题是,这是否可能 相信我

我有几个ISS web服务器,在每个IIS服务器上托管多个web应用程序。 每个系统上都有一个公共证书。 每个IIS都有一个唯一的IP。 所有IIS服务器都放在同一个DMZ中

我已经在另一个DMZ中设置了nginx系统。 我的目标是,让nginx处理来自Internet的所有对IIS的请求,并将所有SSL和证书检查传递给IIS。就像nginx之前一样。我不想让nginx破坏证书,或者卸载证书等等

在我尝试使用nginx反向代理完成之前(因为我对nginx不太熟悉),我的问题是,这是否可能

相信我,我已经在谷歌上搜索了很多次,但都找不到回答我问题的答案 也许我太笨了。我甚至搜索了passthrough,或者反向代理,卸载


到目前为止,我已经收集,nginx可能需要一些额外的MOD。由于我有一个“apt-get”安装,我甚至不知道如何添加它们。

无论如何,我找到了解决方案:

问题:

  • 在每个Web服务器上都有各种应用程序的多个Web服务器在FW后面运行,并且仅在端口443上响应
  • 这些Web服务器有一个通配符证书,它们是IIS Web服务器(非常勇敢),每个服务器上都有公共IP地址
  • 要求所有Web服务器不应暴露于Internet并移动到DMZ
  • 由于目前IP4地址较短,因此不可能获得更多的IPs地址
  • Nginx应该只传递请求。在Web服务器和反向代理之间没有证书断开、解密、重新加密或其他内容 解决方案:

  • 所有Web服务器都应移动到内部DMZ
  • 单个nginx反向代理应基于web服务器的DNS条目处理所有请求并映射它们。这将使公共IP4地址需求过时
  • 所有Web服务器都将获得一个私有IP
  • 一个通配符证书可以处理DNS转发的所有别名
  • 应采取的步骤:

    1。应在外部DMZ上放置一个nginx RP。

    2。配置nginx: -使用apt get Install nginx在完全修补的debian上安装nginx。此时 您将获得nginx的1.14版。当然你也可以编译它

  • 如果您已经通过apt get方式安装了nginx,它将配置以下模块,您稍后将需要这些模块:
    ngx\u stream\u ssl\u preread、ngx\u stream\u map和stream
    。别担心,它们已经在包裹里了。您可以使用
    nginx-V
  • 4。外部DNS配置: -来自Internet的所有DNS请求都应指向nginx

    5。配置nginx反向代理

    • CD至
      /etc/nginx/已启用模块
    • vi您选择的文件名(例如passtru) 此文件的内容:
    在这里输入代码

    stream {
    
      map $ssl_preread_server_name $name {
          webserver01.domain.com webserver01_backend;
          webserver02.domain.com webserver02_backend;
    }
    
    upstream support_backend {
        server 192.168.0.1:443; # or DNS Name
    }
    
    upstream intranet_backend {
        server 192.168.0.2:443;  # or DNS Name
    }
    
    log_format basic '$remote_addr [$time_local] '
                 '$protocol $status $bytes_sent $bytes_received '
                 '$session_time "$upstream_addr" '
                 '"$upstream_bytes_sent" "$upstream_bytes_received" 
                  "$upstream_connect_time"';
    
    access_log /var/log/nginx/access.log basic;
    error_log  /var/log/nginx/error.log;
    
    server {
        listen 443;
        proxy_pass $name;   # Pass allrequests to the above defined variable container $name
        ssl_preread on;
    
     }
    }
    
    server {
    
    listen 80;
    
    return 301 https://$host$request_uri;
    
    }
    
    6。取消默认虚拟Web服务器的链接
    rm/etc/nginx/sites enabled/default

    7。将所有http通信重定向到https:

    • 创建一个文件vi/etc/nginx/conf.d/redirect.conf 添加以下代码
    在这里输入代码

    stream {
    
      map $ssl_preread_server_name $name {
          webserver01.domain.com webserver01_backend;
          webserver02.domain.com webserver02_backend;
    }
    
    upstream support_backend {
        server 192.168.0.1:443; # or DNS Name
    }
    
    upstream intranet_backend {
        server 192.168.0.2:443;  # or DNS Name
    }
    
    log_format basic '$remote_addr [$time_local] '
                 '$protocol $status $bytes_sent $bytes_received '
                 '$session_time "$upstream_addr" '
                 '"$upstream_bytes_sent" "$upstream_bytes_received" 
                  "$upstream_connect_time"';
    
    access_log /var/log/nginx/access.log basic;
    error_log  /var/log/nginx/error.log;
    
    server {
        listen 443;
        proxy_pass $name;   # Pass allrequests to the above defined variable container $name
        ssl_preread on;
    
     }
    }
    
    server {
    
    listen 80;
    
    return 301 https://$host$request_uri;
    
    }
    
  • 测试
    nginx-t
  • 重新加载
    systemctl重新加载nginx
  • 打开浏览器,在调用Web服务器时检查
    /var/log/nginx/access.log

  • 完成