我正在尝试创建一个 Web 服务器,以使用 NGINX 共享我的测试结果报告。
为此,我目前正在使用这Docker 镜像。
在/usr/share/nginx/html/
这个容器里,我有:
-mochawesome 报告
- 资产
--mochawesome.html
Docker文件
配置文件
我的目的是浏览localhost:8080/api-results/
并查看 mochawesome.html。
server {
listen 80;
root /usr/share/nginx/html;
location /api-results/ {
root /mochawesome-report;
index mochawesome.html;
}
}
但不幸的是,它不起作用:
172.17.0.1 - - [16/May/2018:14:21:24 +0000] "GET /api-results/ HTTP/1.1" 404 572 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36" "-"
2018/05/16 14:21:24 [error] 7#7: *1 "/usr/share/nginx/html/api-results/index.html" is not found (2: No such file or directory), client: 172.17.0.1, server: localhost, request: "GET /api-results/ HTTP/1.1", host: "localhost:8080"
另外这是我的 Dockerfile:
FROM nginx:alpine
EXPOSE 80
WORKDIR /usr/share/nginx/html
COPY nginx.conf /etc/nginx/nginx.conf
COPY . /usr/share/nginx/html/
CMD ["/usr/sbin/nginx"]
答案1
我想知道你的网站是否使用相对路径,如果它不起作用请尝试这个:
server {
listen 8080;
server_name mochawesome;
root html;
index index.html;
location /xxx {
proxy_pass http://localhost:8080/mochawesome-report/mochawesome.html;
sub_filter '<head>' '<head>\n<base href="/mochawesome-report/">';
}
location / {
root /usr/share/nginx/html;
}
}
它将改变 mochawesome.html 的基本标签,使得来自代理源的所有请求都能正常工作。
答案2
我的目的是浏览 localhost:8080/api-results/ 并查看 mochawesome.html。
实际上有几种方法可以实现这一点,但与您的最相似的设置是:
主机工作目录中的文件和目录结构
.
..
Dockerfile
nginx.conf
api-results/
mochawesome-resuts/
...
assets
mochawesome.html
Dockerfile
FROM nginx:alpine
EXPOSE 80
WORKDIR /usr/share/nginx/html
COPY nginx.conf /etc/nginx/conf.d/default.conf
COPY api-results /usr/share/nginx/html/api-results
nginx.conf
server {
listen 80;
root /usr/share/nginx/html;
location /api-results {
root /usr/share/nginx/html;
index mochawesome.html;
}
}
测试命令(来自主机工作目录)
docker build . -t test-sf
docker run --rm -it -p 8080:80 --name test-sf test-sf
# navigate in browser to: http://localhost:8080/api-results/
额外的好处是您不会在 html 文件夹中公开 Dockerfile 或 nginx.conf。当然,这可以通过多种方式进行改进,这只是对您原始问题的回答。
作为一个工作示例说明,下面是实时系统的屏幕截图,使用确切地上面列出的文件、目录结构和命令(也打印在屏幕截图上)。