apiVersion: v1
kind: ConfigMap
metadata:
  name: nginx-conf
data:
  nginx.conf: |
    user nginx;
    worker_processes 1;
    pid /run/nginx.pid;

    events {
      worker_connections 1024;
    }

    http {
      include /etc/nginx/mime.types;
      default_type application/octet-stream;

      upstream backend {
        server 127.0.0.1:8080 fail_timeout=0;
      }

      server {
        listen 80;
        server_name _;

        root /www;

        client_max_body_size 100M;
        keepalive_timeout 10s;

        # [<en>] For the /static path, assets are delivered directly from the NGINX container file system.
        # [<ru>] По пути /static отдадим ассеты напрямую из файловой системы NGINX-контейнера.
        location /static {
          # [<en>] Due to the nature of the Webpack's bundling mechanism, the client can keep an asset cache
          # [<en>] for as long as necessary without worrying about invalidation.
          # [<ru>] В силу особенностей механизма сборки ассетов с Webpack клиент может хранить кэш ассетов сколь
          # [<ru>] угодно долго, не беспокоясь об их инвалидации.
          expires 1y;
          add_header Cache-Control public;
          add_header Last-Modified "";
          add_header ETag "";

          # [<en>] Serve pre-compressed files if possible (instead of compressing them on the fly).
          # [<ru>] Когда есть возможность, отдаём заранее сжатые файлы (вместо сжатия на лету).
          gzip_static on;

          access_log off;

          try_files $uri =404;
        }

        # [<en>] The media assets (pictures, etc.) will also be retrieved from the NGINX container file system,
        # [<en>] however, we will disable gzip compression for them.
        # [<ru>] Ассеты медиафайлов (картинки и т.п.) также отдадим из файловой системы NGINX-контейнера, но
        # [<ru>] отключим для них сжатие gzip.
        location /static/images {
          expires 1y;
          add_header Cache-Control public;
          add_header Last-Modified "";
          add_header ETag "";

          access_log off;

          try_files $uri =404;
        }

        # [<en>] All requests, except for asset requests, are routed to the Node.js backend.
        # [<ru>] Все запросы, кроме запросов на получение ассетов, отправляются на Node.js-бэкенд.
        location / {
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header X-Real-IP $remote_addr;
          proxy_set_header X-Forwarded-Proto $scheme;
          proxy_set_header Host $http_host;
          proxy_redirect off;

          proxy_pass http://backend;
        }
      }
    }
