【问题标题】:Two Nginx Reverse Proxies Behind each other with SSL使用 SSL 的两个 Nginx 反向代理
【发布时间】:2020-06-08 04:24:06
【问题描述】:

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

Home Network

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

Reverse Proxies

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

SSL-Certificates

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

这是 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 配置引起的,但我不知道。请帮帮我!

谢谢!

巴南柯尼格


【问题讨论】:

    标签: nginx raspberry-pi ubuntu-18.04 lets-encrypt nginx-reverse-proxy


    【解决方案1】:

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

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

    另外请注意,如果你想代理传递 HTTPS 流量,那么上游也应该配置为接受 HTTPS 连接。

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

    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 Server 上配置和颁发 SSL 证书,然后代理仅将 http 流量传递给 Raspberry Pi,以消除不必要的开销。

    【讨论】:

    • 所以如果不在我的 Ubuntu 服务器上安装证书就不可能将所有流量从 Ubuntu 服务器转发到树莓派?我知道这是很多开销,但正如我提到的,这个 Raspberry Pi 仅用于测试目的。
    猜你喜欢
    • 2020-06-06
    • 1970-01-01
    • 2014-09-06
    • 2023-03-25
    • 2018-05-31
    • 2012-07-11
    • 1970-01-01
    • 2023-03-04
    • 2016-11-17
    相关资源
    最近更新 更多