# some doc: https://www.nginx.com/resources/wiki/start/topics/examples/full/
error_log  /dev/stderr info;

events {}

http {
  ##
  # Basic Settings
  ##
  sendfile on;
  tcp_nopush on;
  tcp_nodelay on;
  keepalive_timeout 65;
  types_hash_max_size 2048;


  # mimetypes, required by jitsi!
  include /etc/nginx/mime.types;
  default_type application/octet-stream;

  types {
    application/wasm wasm;
  }

  ##
  # SSL Settings
  ##

  ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
  ssl_prefer_server_ciphers on;
       
  ##
  # Gzip Settings
  ##
  gzip on;

  access_log /dev/stdout;
  server_names_hash_bucket_size 64;

  # inspired by https://raw.githubusercontent.com/jitsi/docker-jitsi-meet/master/web/rootfs/defaults/meet.conf
  server {
    #listen 0.0.0.0:{{ env "NOMAD_PORT_https_port" }} ssl http2 default_server;
    #listen [::]:{{ env "NOMAD_PORT_https_port" }} ssl http2 default_server;
    listen 0.0.0.0:{{ env "NOMAD_PORT_https_port" }} default_server;
    listen [::]:{{ env "NOMAD_PORT_https_port" }} default_server;
    client_max_body_size 0;
    server_name _;

    # ssi on with javascript for multidomain variables in config.js
    ssi on;
    ssi_types application/x-javascript application/javascript;

    #ssl_certificate /etc/nginx/jitsi.crt;
    #ssl_certificate_key /etc/nginx/jitsi.key;
    root /srv/jitsi-meet;
    index index.html;
    error_page 404 /static/404.html;

    location = /config.js {
      alias /srv/jitsi-meet/config.js;
    }

    location = /interface_config.js {
      alias /srv/jitsi-meet/interface_config.js;
    }

    location = /external_api.js {
      alias /srv/jitsi-meet/libs/external_api.min.js;
    }

    # ensure all static content can always be found first
    location ~ ^/(libs|css|static|images|fonts|lang|sounds|connection_optimization|.well-known)/(.*)$
    {
      add_header 'Access-Control-Allow-Origin' '*';
      alias /srv/jitsi-meet/$1/$2;
    }

    # not used yet VVV
    # colibri (JVB) websockets
    #location ~ ^/colibri-ws/([a-zA-Z0-9-\.]+)/(.*) {
    #  proxy_pass http://$1:9090/colibri-ws/$1/$2$is_args$args;
    #  proxy_http_version 1.1;
    #  proxy_set_header Upgrade $http_upgrade;
    #  proxy_set_header Connection "upgrade";
    #  tcp_nodelay on;
    #}

    location = /http-bind {
        # We add CORS to use a different frontend which is useful for load testing as we do not want to advertise too much our URL
        add_header 'Access-Control-Allow-Headers' 'content-type';
        add_header 'Access-Control-Allow-Methods' 'GET,POST,PUT,DELETE,OPTIONS';
        add_header 'Access-Control-Allow-Origin' '*';
        proxy_pass      http://{{ env "NOMAD_ADDR_bosh_port" }}/http-bind;
        proxy_set_header X-Forwarded-For \$remote_addr;
        #proxy_set_header Host \$http_host;
    }

    # not used yet VVV
    # xmpp websockets
    #location = /xmpp-websocket {
    #    proxy_pass {{ .Env.XMPP_BOSH_URL_BASE }}/xmpp-websocket;
    #    proxy_http_version 1.1;
    #    proxy_set_header Connection "upgrade";
    #    proxy_set_header Upgrade $http_upgrade;
    #    proxy_set_header Host {{ .Env.XMPP_DOMAIN }};
    #    proxy_set_header X-Forwarded-For $remote_addr;
    #    tcp_nodelay on;
    #}

    location ~ ^/([^/?&:'"]+)$ {
      try_files $uri @root_path;
    }

    location @root_path {
      rewrite ^/(.*)$ / break;
    }

  # Not used yet VVVV
  # Etherpad-lite
  # location /etherpad/ {
  #    proxy_http_version 1.1;
  #    proxy_set_header Upgrade $http_upgrade;
  #    proxy_set_header Connection 'upgrade';
  #    proxy_set_header Host $host;
  #    proxy_cache_bypass $http_upgrade;
  #    proxy_pass {{ .Env.ETHERPAD_URL_BASE }}/;
  #    proxy_set_header X-Forwarded-For $remote_addr;
  #    proxy_buffering off;
  #    proxy_set_header Host {{ .Env.XMPP_DOMAIN }};
  #  }

  }
}