【问题标题】:How to let the backend api handle https certificate?如何让后端 api 处理 https 证书?
【发布时间】:2021-01-25 05:24:14
【问题描述】:

我是 nginx 新手。

我的路由器后面有一台机器,它运行一个服务器并使用 Https 正确处理 80 和 443 请求。

问题是我想在另一台设备上托管第二个网站,但我只有一个 IP 地址。我买了一个树莓派零,将它用作路由器后面的反向代理。我安装 nginx 并希望将所有请求重定向到我的其他机器。 RPI 0 和旧机器都有本地 IP。

为了将请求从我的路由器重定向到 RPI 0,然后再重定向到我的旧机器,我使用了 proxy_pass。在端口 80 上一切正常,但在端口 443 上,我的浏览器出现证书错误。

是否可以让整个请求在旧机器上进行,让旧机器像以前一样处理 https 证书?还是强制让nginx处理证书?

旧的但功能齐全的安装示意图

当前安装出现证书错误

我的配置:

upstream backend_a {
    server 192.168.0.20:80;
}

upstream backend_a_s {
    server 192.168.0.20:443;
}

server {
    listen  80;
    server_name mydomain;

    location / {
        include proxy_params;
        proxy_pass http://backend_a;
    }
}

server {
    listen 443 ssl;
    server_name mydomain;

    location / {
        include proxy_params;
        proxy_pass https://backend_a_s;
    }
}

【问题讨论】:

    标签: nginx nginx-reverse-proxy


    【解决方案1】:

    我找到了解决方案。我需要使用端口转发。要在 nginx 中做到这一点,我需要使用 stream 关键字。

    stream {
       server {
            listen 443;
            proxy_pass 192.168.0.20:443;
       }
    }
    

    stream关键字需要和http处于同一级别,所以我需要编辑/etc/nginx/nginx.conf source。其他解决办法是手动编译一个版本的nginx,参数--with-streamsource

    【讨论】:

    • 我也遇到了麻烦。除了在 nginx.conf 中有这个流块之外,你还需要做什么吗?我相信我正在尝试做和你一样的事情。
    • 您应该查看有关port forwarding with nginx 的在线文档。对我来说,问题是流作用域需要与 http 作用域处于同一级别,并且默认 conf 文件被加载到nginx.conf 的 http 作用域中。您还必须检查您使用的 nginx 版本,因为 stream 关键字是最新的。
    猜你喜欢
    • 2011-03-26
    • 2019-07-14
    • 1970-01-01
    • 2017-01-02
    • 2017-02-23
    • 1970-01-01
    • 2019-07-26
    • 1970-01-01
    • 2018-09-06
    相关资源
    最近更新 更多