我有几个 ISS Web 服务器在每个 IIS 服务器上托管多个 Web 应用程序。 每个系统上都有一个公共(public)证书。 每个 IIS 都有一个唯一的 IP。 所有IIS Server都放在同一个DMZ中
我在另一个 DMZ 中设置了一个 nginx 系统。 我的目标是让 nginx 处理所有从 Internet 到 IIS 的请求,并将所有 SSL 和证书检查传递给 IIS。就像在 nginx 之前一样。我不想让 nginx 分解证书,或卸载它们等。
在我尝试使用 nginx 反向代理来完成它之前(因为我对 nginx 不是很熟悉),我的问题是,这是否可能?
相信我,我用谷歌搜索了很多次,但找不到能回答我问题的东西 或者也许我谷歌太笨了。我什至搜索过直通或反向代理、卸载。
到目前为止我已经收集到,nginx 可能需要一些额外的模组。由于我有一个“apt-get”安装,我什至不知道如何添加它们。
最佳答案
没关系,我找到了解决方案:
问题:
- 多个 Web 服务器在每个服务器上都有各种应用程序,它们在 FW 后面运行并且仅在端口 443 上响应
- Web 服务器有一个通配符证书,它们是 IIS Web 服务器(哇哦,非常勇敢),每个服务器都有公共(public) IP 地址
- 要求所有网络服务器都不应暴露在互联网上并移至 DMZ
- 由于现在 IP4 地址很短,不可能获得更多的 IP 地址
- Nginx 应该只传递请求。网络服务器和反向代理之间没有证书中断、解密、重新加密等。
解决方法:
- 所有网络服务器都应移至内部 DMZ
- 单个 nginx 反向代理应根据网络服务器 DNS 条目处理所有请求并映射它们。这将使公共(public) IP4 地址需求过时
- 所有网络服务器都将获得私有(private) IP
- 野生证书可以很好地处理 DNS 转发的所有别名。
需要完成的步骤:
<强>1。单个 nginx RP 应放置在外部 DMZ 上。
<强>2。配置 nginx:
- 使用 apt-get install nginx
在打完补丁的 debian 上安装 nginx。在此刻
您将获得 nginx 的 1.14 版。当然你也可以自己编译
- 如果您通过 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反向代理
- CD 到
/etc/nginx/modules-enabled
- 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;
}
}
6.取消链接默认的虚拟网络服务器
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;
}
- 测试
nginx -t
- 重新加载
systemctl 重新加载 nginx
打开浏览器并在调用网络服务器时检查
/var/log/nginx/access.log
完成
关于nginx - 使用 nginx ssl 直通的反向代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59624481/