为 LXC 容器保留代理

问题描述

我在 ubuntu 16.04 桌面上使用虚拟主机从 GitHub 部署项目。这个项目一旦构建就在 LXD 中部署容器,我可以在我的浏览器中访问它。网址看起来像 https://container-private-ip:4000,它适用于 HTTPS 和端口 4000。在允许不安全的网站连接后,这很有效。

现在我想在 VPS 上部署 GitHub 项目。我让反向代理在指南中工作,但对于我的用例,我似乎无法弄清楚。我可以做些什么不同的事情?

nmap screenshot

Link to the reverse proxy guide I used.

proxy 容器的代码:

server {

        server_name ca.domain.come;

        location / {
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_pass http://futura-ca.lxd:4000; # container name

        }

        real_ip_header proxy_protocol;
        set_real_ip_from 127.0.0.1;

    listen [::]:443 ssl ipv6only=on; # managed by Certbot
    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/ca.katunka.me/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/ca.katunka.me/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

}
server {
    if ($host = ca.domain.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


        listen 80 proxy_protocol;
        listen [::]:80 proxy_protocol;

        server_name ca.domain.com;
    return 404; # managed by Certbot


}

谢谢!

解决方法

在容器内,您可以使用域名,如 proxy.lxdfutura-ca.lxdfutura-ca.lxd 上的网站可以是端口 80 上的普通网站,并且该特定网站上没有 HTTPS。原因是代理容器充当 TLS 终止代理,这意味着 HTTPS 从访问者的浏览器一直处理到(并包括)容器中的代理服务器。

如果端口 4000 是特定 Web 应用程序的默认端口,那么您仍然可以使用该端口。但如果不是,那么坚持80端口更简单。

您使用 TLS 终止代理(certbot 容器)运行 proxy,它负责为您获取 Let's Encrypt 证书。并安装它。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...