【问题标题】:Accessing diffrent websites on separate docker containers based by dns address根据 dns 地址访问不同 docker 容器上的不同网站
【发布时间】:2021-09-14 07:15:27
【问题描述】:

我正在尝试在我的 nas 上托管几个网站,这些网站可以从公众访问。

我的计划是:

  1. 使用DDNS将域名(website1.dns.org、website2.dns.org)翻译成同一个外网IP地址(XXX.YYY.ZZZ.QQQ)
  2. 我的路由器上的端口转发(端口 80 -> 我的 NAS 上的端口 88)
  3. 在我的 NAS 上的不同容器上托管几个网站

问题 - 我不知道如何将需要 website1 的用户重定向到 container1 以及需要使用相同外部 IP 地址的网站 2 到容器 2 的用户。我已经阅读了有关虚拟主机的信息,但这需要一个带有 Web 服务器(nginx 或 apache)的容器。我必须有单独的容器

【问题讨论】:

  • 您需要一个signle-point-entry Web 服务器,它可以通过Host HTTP 标头(即虚拟主机)分隔流量。您可以这样做,以便它将请求转发到 NAS 上的其他容器。换句话说,您可以为您的应用程序拥有单独的容器,而另一个单独的容器作为入口点 Web 服务器。这种网络服务器通常称为反向代理。
  • 您的问题解决了吗?

标签: docker dns hosting virtualhost nas


【解决方案1】:

正如@anemyte 评论的那样,您可以使用反向代理来根据请求中存在的任意数量的第 7 层参数(例如标头)路由请求。 例如,您可以使用 Nginx 作为反向代理,通过提供的 DNS 名称将其路由到 application1,并使用另一个路由到 application2,依此类推。 不要与负载均衡器混淆,负载均衡器通常路由到相同类型的应用程序,并且“只是”因为它的名称平衡实例之间的负载。 这是一个如何配置这样的东西的例子:

您可以在 nginx 配置文件中将每个服务(3 个容器之一)分离到一个服务器,并为每个服务在 domain_name 下指定 DNS

http {
    server {
        listen 80;
        server_name domain_name1;

        location / {
            proxy_pass         http://nas-address:container1-port;
        }
    }
server {
        listen 80;
        server_name domain_name2;

        location / {
            proxy_pass         http://nas-address:container2-port;
        }
    }
server {
        listen 80;
        server_name domain_name3;

        location / {
            proxy_pass         http://nas-address:container3-port;
        }
    }
}

回答哪个更详细:https://serverfault.com/questions/579285/how-to-proxy-a-server-based-on-domain-name-of-request-using-nginx

有关该主题的 nginx 文档:https://docs.nginx.com/nginx/admin-guide/web-server/reverse-proxy/

redhat 使用 nginx 作为反向代理的文章:https://www.redhat.com/sysadmin/setting-reverse-proxies-nginx

希望对你有用

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-26
    • 2017-11-08
    • 1970-01-01
    • 2018-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多