从子目录中提供文件和资产

时间:2017-09-29 20:22:04

标签: nginx nginx-location

我正在尝试从网站的子目录中为文件和资源提供服务,例如:

网站:/ go / tools /(index.html是根文件) 资产链接如下:/go/tools/assets/js/main.js

使用nginx,我的配置如下:

server {
    listen 80;
    listen 443 ssl http2;
    server_name local.tools;

    index index.html;

    location /go/tools {
            # First attempt to serve request as file, then
            # as directory, then fall back to displaying a 404.
            root /code/testing/build;
            try_files $uri /$uri /index.html =404;
    }

当我使用网址local.tools/go/tools加载网站时,会加载index.html页面并且html如下所示:

<!DOCTYPE html>
<html lang="en">
<head>
    <link rel="icon" href="assets/img/favicon.ico">
    <link href="assets/css/vendor/bootstrap.css" rel="stylesheet" type="text/css" />
    <link href="assets/css/styles.css" rel="stylesheet" type="text/css" />
</head>
<body>...

所以那部分是好的。问题是样式和JavaScript不存在。当我查看网络选项卡时,我看到每个资产都在加载index.html内容而不是自己的内容。

我的配置中缺少什么,所以如果我去:/go/tools/assets/css/styles.css我看到实际的样式表?

1 个答案:

答案 0 :(得分:2)

您需要使用以下配置

location /go/tools {
        location /go/tools/assets/ {
            alias /code/testing/build/assets/;
        }
        alias /code/testing/build;
        try_files $uri $uri/ /index.html =404;
}

基本上,当网址为/go/tools/assets时,您需要在构建目录中从/assets进行搜索。这就是我们在嵌套位置

中需要别名的原因