jinx-proxy 0.1.3

Proxy and deploy docker containers
Documentation
user {{nginx_user}};

worker_processes {{nginx_worker_processes}};

events {
  worker_connections {{nginx_worker_connections}};
}

error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;

http {
  # includes
  include /etc/nginx/mime.types;

  # defaults
  default_type application/octet-stream;

  # logging
  log_format main $remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" "$http_x_forwarded_for";
  access_log /var/log/nginx/access.log  main;
  sendfile on;
  keepalive_timeout 65;

  # optimizations
  gzip on;
  gzip_min_length 1000;
  gzip_proxied any;
  gzip_types text/plain text/html text/css application/javascript application/xhtml+xml application/xml image/webp image/apng image/svg+xml;

  # upstreams
{{#each jinx_services}}  upstream {{name}}-jinx-upstream {
    server {{name}}-jinx:{{image_port}};
  }{{/each}}

{{#each jinx_services}}{{#if https_redirect}}  # redirect traffic to https
  server {
    listen 80;
    listen [::]:80;
    server_name {{domain}} www.{{domain}};
    access_log /var/log/nginx/{{image_name}}.access.log main;

    # letsencrypt
    location /.well-known/acme-challenge/ {
      root /var/www/certbot;
    }

    location / {
      return 301 https://$server_name$request_uri;
    }
  }
{{else}}  # http server
  server {
    listen 80;
    listen [::]:80;
    server_name {{domain}} www.{{domain}};
    access_log /var/log/nginx/{{image_name}}.access.log main;

    location / {
      proxy_pass http://{{name}}-jinx-upstream;
      proxy_http_version 1.1;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
    }
  }
{{/if}}{{#if https}}   # https server
  server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name {{domain}} www.{{domain}};

    ssl on;
    ssl_certificate /etc/letsencrypt/live/www.{{domain}}/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/www.{{domain}}/privkey.pem;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
    ssl_session_timeout 1d;
    ssl_session_cache shared:SSL:10m;

    location / {
      proxy_pass http://{{name}}-jinx-upstream;
      proxy_http_version 1.1;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
    }

    # cache web assets
    location ~* \.(jpg|jpeg|png|gif|ico|svg|mp4|css|js)$ {
      proxy_pass http://{{name}}-jinx-upstream;
      proxy_http_version 1.1;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      expires 7d;
    }
  }{{/if}}{{/each}}
}