upstream philomena { server app:4000 fail_timeout=0; } upstream s3 { server files:80 fail_timeout=0; } map $uri $custom_content_type { default "text/html"; ~(.*\.png)$ "image/png"; ~(.*\.jpe?g)$ "image/jpeg"; ~(.*\.gif)$ "image/gif"; ~(.*\.svg)$ "image/svg+xml"; ~(.*\.mp4)$ "video/mp4"; ~(.*\.webm)$ "video/webm"; } server { listen 80 default; listen [::]:80; root $APP_DIR/priv/static; client_max_body_size 125000000; client_body_buffer_size 128k; location ~ ^/img/view/(.+)/([0-9]+).*\.([A-Za-z0-9]+)$ { expires max; add_header Cache-Control public; proxy_pass http://s3/$BUCKET_NAME/images/$1/$2/full.$3; proxy_hide_header Content-Type; add_header Content-Type $custom_content_type; } location ~ ^/img/download/(.+)/([0-9]+).*\.([A-Za-z0-9]+)$ { add_header Content-Disposition "attachment"; expires max; add_header Cache-Control public; proxy_pass http://s3/$BUCKET_NAME/images/$1/$2/full.$3; proxy_hide_header Content-Type; add_header Content-Type $custom_content_type; } location ~ ^/img/(.+) { expires max; add_header Cache-Control public; proxy_pass http://s3/$BUCKET_NAME/images/$1; proxy_hide_header Content-Type; add_header Content-Type $custom_content_type; } location ~ ^/spns/(.+) { expires max; add_header Cache-Control public; proxy_pass http://s3/$BUCKET_NAME/adverts/$1; proxy_hide_header Content-Type; add_header Content-Type $custom_content_type; } location ~ ^/avatars/(.+) { expires max; add_header Cache-Control public; proxy_pass http://s3/$BUCKET_NAME/avatars/$1; proxy_hide_header Content-Type; add_header Content-Type $custom_content_type; } location ~ ^/badge-img/(.+) { expires max; add_header Cache-Control public; proxy_pass http://s3/$BUCKET_NAME/badges/$1; proxy_hide_header Content-Type; add_header Content-Type $custom_content_type; } location ~ ^/tag-img/(.+) { expires max; add_header Cache-Control public; proxy_pass http://s3/$BUCKET_NAME/tags/$1; proxy_hide_header Content-Type; add_header Content-Type $custom_content_type; } location / { try_files $uri @proxy; } location @proxy { proxy_pass http://philomena; proxy_redirect off; proxy_set_header Host $host:$server_port; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_connect_timeout 90; proxy_send_timeout 90; proxy_read_timeout 90; proxy_buffer_size 4k; proxy_buffers 4 32k; proxy_busy_buffers_size 64k; proxy_temp_file_write_size 64k; # Configuration for Phoenix WS proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } }