# nginx-app.conf

# configuration of the server
server {

    listen      80;

    charset     utf-8;

    # max upload size
    client_max_body_size 75M;

    location /static/ {
        alias /usr/src/app/static/;
    }

    location / {
        proxy_pass       http://localhost:8000;
        proxy_set_header Upgrade         $http_upgrade;
        proxy_set_header Connection      "upgrade";
        proxy_set_header Host            $host;
        proxy_set_header X-Real-IP       $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    # -----------
    # Enable GZIP
    # -----------
    gzip               on;
    gzip_disable       "msie6";
    gzip_vary          on;
    gzip_types         text/plain
                       text/css
                       application/json
                       application/javascript
                       application/x-javascript
                       text/xml
                       application/xml
                       application/xml+rss
                       text/javascript
                       image/svg+xml;
    gzip_proxied       any;
    gzip_comp_level    6;
    gzip_buffers       16  8k;
    gzip_http_version  1.0;

    # ------------
    # Cache assets
    # ------------
#    location ~* .(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|css
#                  |rss|atom|js|jpg|jpeg|gif|png|ico|zip|tgz
#                  |gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi
#                  |wav|bmp|rtf)$ {
#        expires max;
#        log_not_found off;
#        access_log off;
#    }
}