x-accel-redirect + Content-Disposition

Igor Sysoev is at rambler-co.ru
Wed Jul 20 14:43:55 MSD 2005


On Wed, 20 Jul 2005, kirill ivanov wrote:

>  Ситуация такая. У нас есть клиент, у клиента есть проект,
>  подразумевающий отдачу большого количества статических файлов
>  (сервис типа fload.ru, rapidshare, etc).
>
>  Все файлы хранятся на диске с "левыми" именами, настоящие имена
>  файлов лежат в базе данных. До того как "лёг" апач под нагрузкой
>  (что произошло в первый же день :), файлы отдавались следующим
>  образом: php-скрипт отрабатывал клиентский запрос, доставал имя
>  файла из базы, и подсовывал его клиентскому браузеру через заголовок
>  Content-Disposition. Примерно так:
>
>  Content-Disposition: attachment; filename=".$t['real_name']
>
>  Мы оперативно переложили отдачу статики на nginx, работающий в
>  качестве фронтенда (настроили internal location, и отдачу заголовка
>  X-Accel-Redirect), и обнаружили, что при этом теряется
>  Content-Disposition.
>
>  Нельзя ли как-то сделать так, чтобы при отработке X-Accel-Redirect
>  nginx отдавал клиенту Content-Disposition, пришедший от backend-а?
>  Долго ли это, и реализуемо ли это вообще? А если не реализуемо - то
>  может быть есть какой-то неочевидный workaround?

Можно. Прилагаемый патч передаёт "Content-Disposition" и ещё исправляет
ошибку в 0.1.39, из-за которой не передавался "Set-Cookie".


Игорь Сысоев
http://sysoev.ru
-------------- next part --------------
--- src/http/ngx_http_upstream.c	Wed Jul 13 20:53:12 2005
+++ src/http/ngx_http_upstream.c	Wed Jul 20 14:40:46 2005
@@ -118,7 +118,11 @@
 
     { ngx_string("Set-Cookie"),
                  ngx_http_upstream_ignore_header_line, 0,
-                 ngx_http_upstream_copy_header_line, 0, 0 },
+                 ngx_http_upstream_copy_header_line, 0, 1 },
+
+    { ngx_string("Content-Disposition"),
+                 ngx_http_upstream_ignore_header_line, 0,
+                 ngx_http_upstream_copy_header_line, 0, 1 },
 
     { ngx_string("Cache-Control"),
                  ngx_http_upstream_process_multi_header_lines,


More information about the nginx-ru mailing list