Nginx

nginx:上游SSL,它在後端是如何加密的?

  • February 15, 2019

我一直在研究這個問題,但找不到明確的答案。在部署到生產環境之前,我真的很想了解這一點,而且我發現的大多數 nginx 資源都不能很清楚地解釋在向代理提供流量時 nginx 背後發生了什麼。

基本上,我正在嘗試加密從 nginx 到客戶端的請求,以及從 nginx 到它背後的代理伺服器的請求。在閱讀並遵循範例之後,我想出了一個似乎可以正常工作的配置。至少在客戶端通過 SSL 接收請求的情況下工作。

我的問題是我最初對雙向加密流量的關注是否實際上是通過以下配置完成的,或者從 nginx 到代理伺服器的連接是否仍然通過 http 而不是 https:

upstream app1 {
       server app1:3000;
}

upstream app2 {
       server app2:5000;
}

server {
      listen         80 default_server;
      listen    [::]:80 default_server;
      server_name    localhost;
      return         301 https://$server_name$request_uri;
}

server {
       listen            443 ssl http2;
       listen            [::]:443 ssl http2;
       server_name       localhost;

       ssl_certificate /etc/ssl/localhost-cert.crt;
       ssl_certificate_key /etc/ssl/localhost-privkey.key;

       ssl_protocols TLSv1.2;
       ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256';
       ssl_prefer_server_ciphers on;

       location / {
         proxy_pass http://app1;
       }

       location /api {
         proxy_pass http://app2;
       }
}

如果從 nginx 到代理伺服器的連接仍然是明文的,我將如何從 nginx 而不是應用伺服器本身加密該數據?

您的配置使用純 HTTP 聯繫後端伺服器,為了保護此路徑,您也需要在這部分使用 https。有完美的文章如何在官方文件中實現這一點

引用自:https://serverfault.com/questions/953950