带有 nginx ssl 直通的反向代理

2023-12-01

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

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

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

相信我,我已经用谷歌搜索了很多次,但找不到可以回答我的问题的东西 或者也许我太愚蠢了谷歌正确。我什至搜索过直通或反向代理卸载。

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


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

Issue:

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

解决方案:

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

需要完成的步骤:

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

2、配置nginx:- 在完全修补的 Debian 上安装 nginxapt-get install nginx。在此刻 您将获得 nginx 版本 1.14。当然你也可以编译它

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

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

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

5.配置nginx反向代理

  • CD to /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. 取消默认虚拟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. test nginx -t
  2. reload systemctl reload nginx
  3. 打开浏览器并检查/var/log/nginx/access.log调用网络服务器时

  4. Finish

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

带有 nginx ssl 直通的反向代理 的相关文章

随机推荐

  • 如何创建只读 ng-repeat?

    初始渲染速度非常慢ng repeat 如何创建只读版本ng repeat 这样当您迭代的数组发生更改时 呈现的 HTML 不会更改 双冒号使 Angular 中的内容成为只读 使用以下语法 ul li item name li ul
  • 图像无拉伸或裁剪

    我的问题很简单 假设我有两个矩形图像 第一个宽 200 像素 高 100 像素 第二个宽 100 像素 高 200 像素 我想以恒定的宽度 高度显示图像 例如150 像素 x 150 像素 无需拉伸图像以适应 我不介意图像周围有空白 填充
  • 如何向 JScrollPane 添加多个元素

    因此 我试图向 JScrollPane 元素添加多个元素 但到目前为止我还无法将其拉出 我可以使第一个元素显示出来 在我的例子中是一张图片 但是在向 JScrollPane 添加额外的面板后 第一个元素消失了 甚至第二个元素 新面板 也没有
  • .Net Standard 上的 Log4Net 没有用于在没有存储库的情况下获取记录器的版本

    我正在尝试将一个项目转移到 net 标准 它基本上是一个类库 我正在使用 log4net 进行日志记录 并且我正在使用该方法 public static ILog GetLogger string name 由于这是一个被多个项目引用的库
  • Mysql 的 WHERE in 子句问题

    mysql 中的 where in 子句有什么问题 我的两张桌子SEATS and REGISTERS看起来像这样 SEATS REGISTERS seat id int register id int seat id varchar 10
  • 更改 Android 上另一个应用程序的权限(已 root)

    我看到了一些关于此的主题 但没有一个真正谈到我想做的事情 我正在尝试编写一个应用程序 该应用程序将拒绝另一个应用程序连接到互联网 IE 防火墙 的能力 根据我创建的算法 它将确定该应用程序是恶意的 该应用程序将安装在已root的手机上 然后
  • C# 只读字段是否允许在类外部修改?

    我有一个readonly我通过构造函数参数设置的对象字段 如果我修改对象 类内的字段也会改变 我猜这是通过引用调用 有什么办法可以更好地做到这一点 防止它吗 private void Form1 Load object sender Eve
  • 打开关闭 GPS android [重复]

    这个问题在这里已经有答案了 可能的重复 如何以编程方式在 Android Cupcake 中启用 GPS 我目前正在 Android 中编写一个与 GPS 配合使用的应用程序 目前我可以确定 GPS 是否启用 我的问题是 如果禁用了 GPS
  • 减少 iTextSharp 上的段落换行高度

    当段落长度对于 ColumnText 的宽度来说太长时 如何减少换行符的高度 我尝试了以下方法 因为我看到了其他问题的答案 p Leading 0 但这并没有产生任何影响 我也尝试过增加Leading to 100看看是否添加了更大的换行符
  • 事件委托,Event.target 与 Event.currentTarget

    In MDN Event target 参考有一个关于实现事件委托的示例 事件委托示例 Assuming there is a list variable containing an instance of an HTML ul eleme
  • 使用提升日期的工作日持续时间

    有没有办法只得到没有 2 个提升日期之间的工作日 在下文中 我只获取日历日 date begin dt 2011 Aug 3 date end dt day clock local day days duration end dt begi
  • Asp.NET MVC 3 项目模板未显示

    我安装了 Async CTP 但不知道它会导致 Asp NET MVC 3 出现问题 因此 我按照所有可能的卸载说明重新安装了 SP1 和 MVC 3 但是 MVC 3 模板不会显示在新项目对话框中 我已确保对话框中的目标平台是 NET 4
  • 使用 shell 脚本仅从 sftp 获取最新文件

    我只需要按照日期从 sftp 获取最新文件 例如 yyyy mm dd 我尝试了较低的命令 但它将获取目录中的所有文件 latest file ls ltr tail 1 awk print 9 scp r latest file user
  • 依赖于私有 AZ 存储库的 Azure 构建管道

    我们在 Azure 存储库中有一个 Angular 项目 它引用依赖项下的 packages json 文件中的另一个私有 Azure 项目 存储库 该项目在本地为所有开发人员构建良好 但在 Azure Pipeline 中失败 身份验证失
  • oracle程序创建并运行ora-00900错误

    我在 dbeaver 中做了这样的 oracle 程序 CREATE OR REPLACE PROCEDURE p test IS I MESSAGE VARCHAR2 100 test BEGIN dbms output put line
  • C++ - 最佳实践:“使用 std::cout” 与“std::cout” [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 我知道 在 C 中 我们永远不应该使用 using namespace std 两种可能的替代方案是 1 添加using std cout 在文件的开头 然后输入cout每当需要时 2 t
  • 是否可以在 PHP 中创建静态类(就像在 C# 中一样)?

    我想在 PHP 中创建一个静态类 并让它像在 C 中一样运行 所以 第一次调用类时会自动调用构造函数 无需实例化 诸如此类的东西 static class Hello private static greeting Hello privat
  • 在 cakephp 2 的行为中读取会话变量

    我有一种行为可以根据会话中存储的用户 ID 来隔离用户数据 在 CakePHP 1 3 中你可以这样做 App import Component Session session new SessionComponent session gt
  • 验证在单元测试中调用了一种方法或另一种方法

    Example public bool Save MyObj instance if instance IsNew this repository Create instance else this repository Update in
  • 带有 nginx ssl 直通的反向代理

    我有多个 ISS Web 服务器 在每个 IIS 服务器上托管多个 Web 应用程序 每个系统上都有一个公共证书 每个 IIS 都有一个唯一的 IP 所有IIS服务器都放置在同一个DMZ中 我在另一个 DMZ 中设置了 nginx 系统 我