Во время развертывания я создаю артефакты, которые представляют собой папки со статическими файлами - 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
I нужно, чтобы при вводе любой ссылки, начинающейся site.com/${SHORT_COMMIT_HASH}, отображался index.html из каталога / usr / share / nginx / html / $ {SHORT_COMMIT_HASH}
У меня есть конфигурация 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;
}
}
Но у меня проблема. css, js файлы nginx пытается найти не в site.com/${SHORT_COMMIT_HASH}, а в корне site.com/
Как я могу изменить корень для местоположения / где для каждого запроса, это будет собственный корень, относительный $ {SHORT_COMMIT_HASH};
Как я могу сделать это с помощью переменных:
location / {
root /usr/share/nginx/html/${SHORT_COMMIT_HASH};
}
Я нахожу решение с помощью 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;
}
}