ЖЖ
Dockerfile:
FROM nginx:stable-alpinenginx.conf.template:
ENV API_BASE_URL="https://api.example.com/"
COPY /build /usr/share/nginx/html
RUN rm /etc/nginx/conf.d/default.conf
COPY nginx.conf.template /etc/nginx/templates/
EXPOSE 80
server {При старте контейнера
listen 80;
root /usr/share/nginx/html;
index index.html;
location / {
try_files $uri $uri/ @rewrites;
}
location @rewrites {
rewrite ^(.+)$ /index.html last;
}
location /api-base-url {
add_header Last-Modified $date_gmt;
add_header Cache-Control 'no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0';
if_modified_since off;
expires off;
etag off;
default_type text/plain;
return 200 ${API_BASE_URL};
}
.template
файл обрабатывается и результат помещается в conf.d
. Если переменная не приехала в контейнер - используется дефолтное значение из докерфайла. Если приехала - подставится она. Ну а дальше дело техники заставить фреймворк прочитать адрес апишки из /api-base-url
и ходить туда. Наверное где-то в этом кроется лёгкая несекьюрность, но не больше, чем её в принципе есть в JS-фреймворках.Спасибо @syabro_chats и @vaivanov !