NGINX 的位置指令不起作用

NGINX 的位置指令不起作用

我正在尝试创建一个 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。当然,这可以通过多种方式进行改进,这只是对您原始问题的回答。

作为一个工作示例说明,下面是实时系统的屏幕截图,使用确切地上面列出的文件、目录结构和命令(也打印在屏幕截图上)。

工作示例图

相关内容