使用Nginx反向代理和SSL透传

4
我有几个IIS Web服务器,每个IIS服务器上托管了多个Web应用程序。每个系统都有公共证书。每个IIS都有唯一的IP地址。所有IIS服务器都放置在同一个DMZ中。
我在另一个DMZ中设置了一个nginx系统。我的目标是让nginx处理来自Internet的所有对IIS的请求,并将SSL和证书检查全部通过给IIS,就像没有使用nginx一样。我不想让nginx拆分或卸载证书等。
在尝试使用nginx反向代理之前(因为我不太熟悉nginx),我的问题是,这是否可行?
相信我,我已经搜索过很多次,但找不到能回答我的问题的内容。或者可能是我太蠢了,无法正确地使用Google。我甚至搜索了通过、反向代理、卸载等内容。
到目前为止,我已经收集到,nginx可能需要一些额外的模块。由于我使用的是“apt-get”安装,我甚至不知道如何添加它们。
1个回答

4

没关系,我找到了解决方案:

问题:

  1. 多个Web服务器运行在防火墙后面,每个服务器上有各种应用程序,只响应端口443
  2. 这些Web服务器有通配符证书,它们是IIS Web服务器(非常勇敢),每个都有公共IP地址
  3. 要求所有Web服务器不暴露在互联网上,并移到DMZ中
  4. 由于现在IP4地址很短,因此不可能获得更多的IP地址
  5. Nginx应该只传递请求。反向代理和Web服务器之间不应该进行证书拆分、解密或重新加密等操作。

解决方案:

  1. 所有Web服务器都应该移动到内部DMZ中
  2. 一个单独的nginx反向代理应该处理所有基于Web服务器DNS条目的请求并进行映射。这将使公共IP4地址需求过时
  3. 所有Web服务器都将获得私有IP地址
  4. 一个通配符证书可以很好地处理所有别名的DNS转发。

需要执行的步骤:

1. 在外部DMZ上放置单个nginx RP。

2. 配置nginx: - 在经过全面修补的Debian上安装nginx:apt-get install nginx。此时,您将获得nginx 1.14版本。当然,您也可以编译它。

  1. 如果您通过apt-get方式安装了nginx,则它将配置以下模块,您以后会需要它们:ngx_stream_ssl_preread、ngx_stream_map和stream。不用担心,它们已经在软件包中。您可以使用nginx -V来检查。

4. 外部DNS配置: - 来自互联网的所有DNS请求都应指向nginx。

E.g   webserver1.domain.com --> nginx
      webserver2.domain.com --> nginx
      webserver3.domain.com --> nginx

5. 配置Nginx反向代理

  • 切换到 /etc/nginx/modules-enabled 目录
  • 使用你选择的文件名(例如 passtru)通过 vi 创建文件,文件内容如下:

输入代码:

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;

 }
}

6. 取消默认虚拟Web服务器的链接 rm /etc/nginx/sites-enabled/default

7. 将所有http流量重定向到https:

  • 创建文件 vi /etc/nginx/conf.d/redirect.conf 添加以下代码

输入代码

server {

listen 80;

return 301 https://$host$request_uri;

}
  1. 测试 nginx -t
  2. 重新加载 systemctl reload nginx
  3. 打开浏览器,在调用Web服务器时检查/var/log/nginx/access.log

  4. 完成


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接