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

问题描述 投票:0回答:1

我想相互建立两个反向代理。这是我的网络的示意图:

Home Network

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

Reverse Proxies

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

SSL-Certificates

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

这是Ubuntu Server的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


nginx raspberry-pi ubuntu-18.04 lets-encrypt nginx-reverse-proxy
1个回答
0
投票

问题是,您没有在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,以消除不必要的开销。

© www.soinside.com 2019 - 2024. All rights reserved.