在部署期间,我创建了工件,即包含静态文件(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;
}
}