worker_processes  1;

events {
    worker_connections  1024;
}

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

    sendfile        on;
    keepalive_timeout  65;
    proxy_connect_timeout 1600;
    proxy_send_timeout 1600;
    proxy_read_timeout 1600;
    send_timeout 1600;

    server {
        listen 4408 default_server;

        access_log off;
        error_log off;
        gzip on;
        gzip_vary on;
        gzip_proxied any;
        gzip_proxied expired no-cache no-store private auth;
        gzip_comp_level 4;
        gzip_buffers 16 8k;
        gzip_http_version 1.1;
        gzip_types text/plain text/css text/xml text/javascript application/x-javascript application/json application/xml;

        root /usr/share/fluidd;

        index index.html;
        server_name _;

        client_max_body_size 0;
        proxy_request_buffering off;

        location / {
            try_files $uri $uri/ /index.html;
        }

        location = /index.html {
            add_header Cache-Control "no-store, no-cache, must-revalidate";
        }

        location /websocket {
            proxy_pass http://apiserver/websocket;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection $connection_upgrade;
            proxy_set_header Host $http_host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_read_timeout 86400;
        }

        location ~ ^/(printer|api|access|machine|server)/ {
            proxy_pass http://apiserver$request_uri;
            proxy_set_header Host $http_host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Scheme $scheme;
        }

        location /webcam/ {
            proxy_pass http://mjpgstreamer1/;
        }

        location /webcam2/ {
            proxy_pass http://mjpgstreamer2/;
        }

        location /webcam3/ {
            proxy_pass http://mjpgstreamer3/;
        }

        location /webcam4/ {
            proxy_pass http://mjpgstreamer4/;
        }
    }

    server {
        listen 4409 default_server;

        access_log off;
        error_log off;
        gzip on;
        gzip_vary on;
        gzip_proxied any;
        gzip_proxied expired no-cache no-store private auth;
        gzip_comp_level 4;
        gzip_buffers 16 8k;
        gzip_http_version 1.1;
        gzip_types text/plain text/css text/xml text/javascript application/javascript application/x-javascript application/json application/xml;

        root /usr/data/mainsail;

        index index.html;
        server_name _;

        client_max_body_size 0;
        proxy_request_buffering off;

        location / {
            try_files $uri $uri/ /index.html;
        }

        location = /index.html {
            add_header Cache-Control "no-store, no-cache, must-revalidate";
        }

        location /websocket {
            proxy_pass http://apiserver/websocket;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection $connection_upgrade;
            proxy_set_header Host $http_host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_read_timeout 86400;
        }

        location ~ ^/(printer|api|access|machine|server)/ {
            proxy_pass http://apiserver$request_uri;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Host $http_host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Scheme $scheme;
        }

        location /webcam/ {
            postpone_output 0;
            proxy_buffering off;
            proxy_ignore_headers X-Accel-Buffering;
            access_log off;
            error_log off;
            proxy_pass http://mjpgstreamer1/;
        }

        location /webcam2/ {
            postpone_output 0;
            proxy_buffering off;
            proxy_ignore_headers X-Accel-Buffering;
            access_log off;
            error_log off;
            proxy_pass http://mjpgstreamer2/;
        }

        location /webcam3/ {
            postpone_output 0;
            proxy_buffering off;
            proxy_ignore_headers X-Accel-Buffering;
            access_log off;
            error_log off;
            proxy_pass http://mjpgstreamer3/;
        }

        location /webcam4/ {
            postpone_output 0;
            proxy_buffering off;
            proxy_ignore_headers X-Accel-Buffering;
            access_log off;
            error_log off;
            proxy_pass http://mjpgstreamer4/;
        }
    }

    map $http_upgrade $connection_upgrade {
        default upgrade;
        '' close;
    }
    upstream apiserver {
        ip_hash;
        server 127.0.0.1:7125;
    }

    upstream mjpgstreamer1 {
        ip_hash;
        server 127.0.0.1:8080;
    }

    upstream mjpgstreamer2 {
        ip_hash;
        server 127.0.0.1:8081;
    }

    upstream mjpgstreamer3 {
        ip_hash;
        server 127.0.0.1:8082;
    }

    upstream mjpgstreamer4 {
        ip_hash;
        server 127.0.0.1:8083;
    }

}
