ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: x-accel-redirect + Content-Disposition



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
--- 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,


 




Copyright © Lexa Software, 1996-2009.