如何在 NGINX 配置中创建动态根路径?

如何在 NGINX 配置中创建动态根路径?

在部署期间,我创建了工件,即包含静态文件(html、css、js)的文件夹。然后将它们复制到服务器的文件夹 /usr/share/nginx/html/${SHORT_COMMIT_HASH} 中。

例如,该网站可供参考。

site.com/${SHORT_COMMIT_HASH} 

请求如下所示:

site.com/9f9b348b/some_url_1/1
site.com/9f9b348b/some_url_2/2

我需要,当输入以 site.com/${SHORT_COMMIT_HASH} 开头的任何链接时,会显示目录 /usr/share/nginx/html/${SHORT_COMMIT_HASH} 中的 index.html

我有它的 nginx 配置:

server {
    listen       80;
    server_name  localhost;

    location / {
      root /usr/share/nginx/html;
    }

    location ~ ^/([a-zA-Z0-9]*)/ {
      root /usr/share/nginx/html;
      try_files $uri $uri/ /$1/index.html;
    }
}

但我遇到了麻烦。nginx 尝试在 site.com/${SHORT_COMMIT_HASH} 中查找 css、js 文件,而不是在 site.com/ 的根目录中查找

我如何才能更改每个请求的位置/位置的根,将是自己的根,相对 ${SHORT_COMMIT_HASH};

我如何使用变量来做到这一点:

location / {
  root /usr/share/nginx/html/${SHORT_COMMIT_HASH};
} 

答案1

我使用 sub_filter 找到了解决方案:

server {
    listen       80;
    server_name  localhost;

    location / {
     root /usr/share/nginx/html;
     try_files $uri $uri/ /$1/index.html;

     location ~ "^/([a-z0-9]{8})/" {
        try_files $uri /$1/index.html = 404;
        sub_filter_once off;
        # sub_filter_types text/html; # mime-type based rewriter
        sub_filter '/static' '/$1/static';
  }
    }

    location ~ ^/([a-zA-Z0-9]*)/ {
      root /usr/share/nginx/html;
      try_files $uri $uri/ /$1/index.html;
    }
}

相关内容