【问题标题】:NGINX Server to Redirect to Docker ContainerNGINX 服务器重定向到 Docker 容器
【发布时间】:2022-01-30 17:19:22
【问题描述】:

以下我想实现:

在服务器 A 上安装了 docker。假设有 3 个容器:

  • 容器 1:App1,ip:172.17.0.2,网络:mynet,简单 HTML 欢迎页面,可通过端口 80 访问
  • 容器 2:App2,ip:172.17.0.3,网络:mynet,Wiki 系统 -> dokuwiki,可通过端口 8080 访问
  • 容器 3:App3,ip:172.17.0.4,网络:mynet,其他东西

您可以看到,每个容器都在同一个 Docker 网络中。容器可以通过不同的端口访问。

同一网络上的客户端需要访问所有容器。在这种情况下我不能使用 DNS(通过 VHOST 反向代理),因为我无法控制 DNS。我的目标:

我为解决这个问题所做的如下:使用 nginx 添加另一个容器,并对容器执行 proxy_pass。我使用官方的 nginx 映像(docker pull nginx),然后将我的自定义配置挂载到 /etc/nginx/conf.d 目录中。我的配置如下所示:

server {

    location / {
        root    /usr/share/nginx/html;
        index:  index.html index.htm;
    }

    location /app1/ {
        proxy_pass http://app1/
    }

    location /app2/ {
        proxy_pass http://app2:8080/
    }

    location /app3/ {
        proxy_pass http://app3/
    }

}

app1 确实有效。 app2 没有:它打印出一些丑陋的 html 输出。在浏览器 Web 控制台中,我看到很多 404。我猜这与 nginx 的 Reverse / Rewrite 有关,因为 app2 是 Dokuwiki。我还为 nginx 添加了等效的 apache ProxyPassReverse,但没有成功。

我只是不知道在这种情况下该怎么做,或者从哪里开始。我怎么知道,要重写什么?我希望有人可以帮助我。

【问题讨论】:

  • 我猜 docuwiki 设置引用了静态资产。您可能需要对其进行配置,以便它知道它不是托管在基本 URL / 上,而是托管在 /app2 上。否则内部生成的静态资源链接会出错。
  • 如果 app2 正在监听 8080 端口,那么您需要将其指定为 proxy_pass http://app2:8080/
  • @HansKilian 对不起,我已经这样做了。我的错。我更正了帖子。

标签: docker nginx dokuwiki


【解决方案1】:

如 cmets 中所述: 一旦我使用 dokuwiki basedir / baseurl 配置,代理就会按预期工作。为此,请编辑位于conf 文件夹中的dokuwiki.php 配置文件:

conf/dokuwiki.php

将以下设置更改为您的环境

$conf['basedir']     = '/dokuwiki';
$conf['baseurl']     = '';

【讨论】:

    猜你喜欢
    • 2017-05-07
    • 1970-01-01
    • 2020-12-10
    • 2021-12-27
    • 2018-05-23
    • 2019-03-11
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    相关资源
    最近更新 更多