Dockerized Nginx 和 Gogs 无法提供资产(404 错误)

Dockerized Nginx 和 Gogs 无法提供资产(404 错误)

我已经设置了一个服务器,使用容器化的 Nginx 通过标准 URL 为网站提供服务。该网站运行完全正常。

不过,在子网址 (/gogs/) 上,我将所有请求代理到 GOGS 实例。这也是容器化的,容器通过自定义 Docker 网络进行通信。

我的问题是,GOGS 的所有资产都无法加载。我只收到 404 错误。

这是来自 nginx 日志:

[error] 7#7: *38 open() "/website/gogs/js/libs/clipboard-1.5.9.min.js" failed (2: No such file or directory), client: $IP, server: website, request: "GET /gogs/js/libs/clipboard-1.5.9.min.js HTTP/2.0", host: "website"

/网站是挂载在Nginx容器中的卷。

这是我的代理配置:

location /gogs/ {
  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 http://gogs:3000/;
}

我的大部分 Nginx 配置基于https://github.com/h5bp/server-configs-nginx

这可能是一个问题吗?

我该如何解决我看到的 404 错误?

编辑: 日志/gogs.log

2017/07/03 04:33:10 [TRACE] Template: user/dashboard/dashboard

其他文件都是空的,并且文件夹中有一个损坏的符号链接:

lrwxrwxrwx 1 user user   14 Jul  2 21:08 log -> /data/gogs/log

我猜测这是 gogs 提供的 docker 镜像中配置错误。

答案1

(没有足够的代表来评论......)

看起来你的容器化 nginx 不提供来自 Gogs 的静态文件。你使用的是什么 Gogs 镜像?你如何启动你的容器:docker run??docker-compose

发布你的 Dockerfiles 或 docker-compose.yml 以及 nginx conf(至少是部分server)也可能会有帮助

nginx 和 gogs 容器应该共享 Gogs 存储其代码的卷,我假设该卷位于主机上的网站目录中。 (假设它安装在/var/www/html容器内部)。 使用 Docker:

$ docker run -d -v /website:/var/www/html --name gogs gogs
$ docker run -d -v /website:/var/www/html --name nginx --link gogs nginx

并且你的 Nginx 服务器配置应该设置root /var/www/html以便它可以找到静态文件:

server {
    root /var/www/html;
    location /gogs/ {
        (proxy_pass...)
    }
}

相关内容