两个 Nginx 反向代理使用 SSL 彼此落后

Two Nginx Reverse Proxies Behind each other with SSL

我想设置两个反向代理。这是我的网络的一个小草图:

Home Network

所以我想 运行 在我的 Ubuntu 服务器上安装一个 nginx 反向代理,在我的 Raspberry Pi 上安装一个。 Raspberry Pi 没有 24/7 全天候 运行 服务,因为它仅用于测试目的或临时服务。

Reverse Proxies

下图显示了我想如何使用 SSL 证书以及我想在哪里颁发证书。我想在我的 Ubuntu 服务器上为我的 Ubuntu 服务器上的服务 运行ning 颁发证书,我想在我的 Ubuntu 服务器上为服务 运行ning 颁发 SSL 证书我的树莓派 Raspberry Pi.

SSL-Certificates

我的问题是,颁发 SSL 证书(在我的 Raspberry Pi 上使用 Certbot)是成功的,但是当我想在我的 [=40= 上访问 HTTPS 服务 运行ning 时] 现在,我的 Ubuntu 服务器上的 Nginx 反向代理 运行ning 不会将所有流量转发到我的 Raspberry Pi 上的 Nginx 反向代理,它使用安装在我的 [=47] 上的证书=] 服务器.

这里是 Ubuntu 服务器的 Nginx 配置:

server {
    server_name raspberry.mydomain.tld www.raspberry.mydomain.tld;

    ssl off;

    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass https://192.168.0.45:443;
    }
}

这里是 Raspberry Pi:

的 Nginx 配置
server {
    server_name raspberry.mydomain.tld www.raspberry.mydomain.tld;

    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/raspberry.mydomain.tld/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/raspberry.mydomain.tld/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

    location / {
        proxy_pass http://localhost:3000;
    }
}

server {
    if ($host = www.raspberry.mydomain.tld) {
        return 301 https://$host$request_uri;
    } # managed by Certbot

    if ($host = raspberry.mydomain.tld) {
        return 301 https://$host$request_uri;
    } # managed by Certbot

    listen         80 default_server;
    server_name raspberry.mydomain.tld www.raspberry.mydomain.tld;
    return 404; # managed by Certbot
}

我认为出现此行为是因为我的 Ubuntu 服务器上的 Nginx 配置,但我不知道。请帮助我!

谢谢!

Bananenkönig


问题是您没有在 Ubuntu 服务器上设置 HTTPS 侦听器和有效证书,因为您试图终止其上的 HTTPS,然后代理将请求传递给 Raspberry Pi。

因此您需要在 nginx 设置中指定证书才能代理通过 HTTPS 流量。

另请注意,如果您想代理传递 HTTPS 流量,则还应将上游配置为接受 HTTPS 连接。

将 HTTPS 侦听器和证书设置添加到服务器部分 Ubuntu 服务器的配置中。

listen 80;
listen 443 ssl;
ssl_certificate     /path_to_cert/server.crt;
ssl_certificate_key /path_to_key/server.key;

删除ssl off;

proxy_set_header X-Forwarded-Proto $scheme; 行添加到位置:

    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_pass https://192.168.0.45:443;
    }

我建议您仅在 Ubuntu 服务器上配置和颁发 SSL 证书,然后代理仅将 http 流量传递给 Raspberry Pi 以消除不必要的开销。