簡體   English   中英

使用 nginx ssl 直通的反向代理

[英]reverse proxy with nginx ssl passthrough

我有幾個 ISS Webservers 在每個 IIS 服務器上托管多個 Web 應用程序。 每個系統上都有一個公共證書。 每個 IIS 都有一個唯一的 IP。 所有 IIS 服務器都放在同一個 DMZ 中

我在另一個 DMZ 中設置了一個 nginx 系統。 我的目標是,讓 nginx 處理從 Internet 到 IIS 的所有請求,並且只需將所有 SSL 和證書檢查傳遞給 IIS。 就像在 nginx 之前一樣。 我不想讓 nginx 分解證書,或者卸載它們等。

在我嘗試使用 nginx 反向代理來完成它之前(因為我對 nginx 不是很熟悉),我的問題是,這是否可能?

相信我,我已經在谷歌上搜索了很多次,但找不到可以回答我的問題的東西,或者也許我在谷歌上太愚蠢了。 我什至搜索了直通或反向代理卸載。

到目前為止,我已經收集到,nginx 可能需要一些額外的 mod。 由於我有一個“apt-get”安裝,我什至不知道如何添加它們。

沒關系我找到了解決方案:

問題:

  1. 多個具有各種應用程序的 Web 服務器在 FW 后面運行並且僅在端口 443 上響應
  2. Webservers 有一個通配符證書,它們是 IIS Webservers(whoooho 非常勇敢),每個都有公共 IP 地址
  3. 要求所有網絡服務器都不應暴露於 Internet 並移動到 DMZ
  4. 由於現在 IP4 地址很短,因此不可能獲得更多 IP 地址
  5. Nginx 應該只傳遞請求。 網絡服務器和反向代理之間沒有證書破壞、解密、重新加密或任何其他方式。

解決方案:

  1. 所有網絡服務器都應移至內部 DMZ
  2. 單個 nginx 反向代理應根據網絡服務器 DNS 條目處理所有請求並映射它們。 這將使公共 IP4 地址需求過時
  3. 所有網絡服務器都將獲得私有 IP
  4. 野生證書可以很好地處理 DNS 轉發的所有別名。

要做的步驟:

1. 單個 nginx RP 應該放在 external-DMZ 上。

2. 配置 nginx: - 使用apt-get install nginx在已打完補丁的 debian 上apt-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。

 Eg 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 reload nginx
  3. 打開瀏覽器並在調用網絡服務器時檢查/var/log/nginx/access.log

  4. 結束

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM