nginx - 使用 nginx ssl 直通的反向代理

标签 nginx stream reverse-proxy nginx-reverse-proxy pass-through

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

我在另一个 DMZ 中设置了一个 nginx 系统。 我的目标是让 nginx 处理所有从 Internet 到 IIS 的请求,并将所有 SSL 和证书检查传递给 IIS。就像在 nginx 之前一样。我不想让 nginx 分解证书,或卸载它们等。

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

相信我,我用谷歌搜索了很多次,但找不到能回答我问题的东西 或者也许我谷歌太笨了。我什至搜索过直通或反向代理、卸载。

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

最佳答案

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

问题:

  1. 多个 Web 服务器在每个服务器上都有各种应用程序,它们在 FW 后面运行并且仅在端口 443 上响应
  2. Web 服务器有一个通配符证书,它们是 IIS Web 服务器(哇哦,非常勇敢),每个服务器都有公共(public) IP 地址
  3. 要求所有网络服务器都不应暴露在互联网上并移至 DMZ
  4. 由于现在 IP4 地址很短,不可能获得更多的 IP 地址
  5. Nginx 应该只传递请求。网络服务器和反向代理之间没有证书中断、解密、重新加密等。

解决方法:

  1. 所有网络服务器都应移至内部 DMZ
  2. 单个 nginx 反向代理应根据网络服务器 DNS 条目处理所有请求并映射它们。这将使公共(public) IP4 地址需求过时
  3. 所有网络服务器都将获得私有(private) IP
  4. 野生证书可以很好地处理 DNS 转发的所有别名。

需要完成的步骤:

<强>1。单个 nginx RP 应放置在外部 DMZ 上。

<强>2。配置 nginx: - 使用 apt-get install nginx 在打完补丁的 debian 上安装 nginx。在此刻 您将获得 nginx 的 1.14 版。当然你也可以自己编译

  1. 如果您通过 apt-get 方式安装了 nginx,它将配置以下模块,您稍后将需要这些模块:ngx_stream_ssl_preread、ngx_stream_map 和 stream。别担心,它们已经在包裹里了。您可以使用 nginx -V
  2. 检查

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

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

  4. 完成

关于nginx - 使用 nginx ssl 直通的反向代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59624481/

相关文章:

python - nginx 配置 : IP address showing instead of domain name

linux - 如何在 Pressmatic 上用 PHP 启用 SOAP 客户端

linux - Nginx 配置添加 www 忽略请求 uri

asynchronous - 如何仅在 Dart 中完成上一次执行后才定期调用函数?

url - 如何在nginx中将多个路径指向代理服务器

docker - Nginx proxy_reverse用于docker容器

amazon-web-services - 无法将 AWS Kibana 代理传递给 nginx

C# 扩展 SoapExtension -

sockets - 如何获得连接的客户端的IP地址?

node.js - 在 digital ocean 水滴上连接我的域名