我已经设置了一个服务器,使用容器化的 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...)
}
}