proper content-disposition header when downloading attachments

This commit is contained in:
Régis Hanol
2013-09-06 19:23:56 +02:00
parent eae7e75611
commit 45b838009c
8 changed files with 94 additions and 42 deletions
+37 -27
View File
@@ -22,50 +22,60 @@ server {
sendfile on;
keepalive_timeout 65;
# maximum file upload size (keep up to date when changing the corresponding site setting)
client_max_body_size 2m;
# path to discourse's public directory
set $public /var/www/discourse/public;
location / {
root /var/www/discourse/public;
root $public;
## optional upload anti-hotlinking rules
#location ~ ^/uploads/ {
# valid_referers none blocked mysite.com *.mysite.com;
# if ($invalid_referer) {
# return 403;
# }
#}
## [LEGACY] this is deprecated, leaving it there for a small transition period
location ~ ^/t\/[0-9]+\/[0-9]+\/avatar {
expires 1d;
add_header Cache-Control public;
add_header ETag "";
}
location ~ ^/(assets|uploads)/ {
location ~ ^/assets/ {
expires 1y;
add_header Cache-Control public;
add_header ETag "";
break;
}
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
location ~ ^/uploads/ {
expires 1y;
add_header Cache-Control public;
add_header ETag "";
## optional upload anti-hotlinking rules
#valid_referers none blocked mysite.com *.mysite.com;
#if ($invalid_referer) {
# return 403;
#}
# If the file exists as a static file serve it directly without
# running all the other rewrite tests on it
if (-f $request_filename) {
break;
}
# let NGINX serve images
location ~* \.(gif|png|jpg|jpeg|bmp|tif|tiff)$ { try_files $uri =404; }
location ~ /_optimized/ { try_files $uri =404; }
if (!-f $request_filename) {
# attachments must go through the rails application to get the right content-disposition header
proxy_set_header X-Sendfile-Type X-Accel-Redirect;
proxy_set_header X-Accel-Mapping $public/=/downloads/;
proxy_pass http://discourse;
break;
}
try_files $uri @discourse;
}
location /downloads/ {
internal;
alias $public/;
}
location @discourse {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_pass http://discourse;
}
}