首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有SSL的两个Nginx反向代理

带有SSL的两个Nginx反向代理
EN

Stack Overflow用户
提问于 2020-06-07 19:52:34
回答 1查看 2.2K关注 0票数 0

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

家庭网络

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

反向代理

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

SSL-证书

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

下面是Ubuntu的Nginx配置:

代码语言:javascript
复制
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配置:

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-07 20:24:06

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

因此,您需要在nginx设置中指定证书,以便能够代理传递HTTPS通信量。

还请注意,如果您希望代理通过HTTPS通信量,那么上游也应该配置为接受HTTPS连接。

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

代码语言:javascript
复制
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;行添加到位置:

代码语言:javascript
复制
    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,以消除不必要的开销。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62250815

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档