X-Accel-Redirect и uri escape

Роман Шишнев rommer at active.by
Mon Nov 25 02:00:31 UTC 2013


Hello,

Обнаружил несколько странное поведение nginx при обработке
X-Accel-Redirect от upstream:

При появлении знака "?" в имени файла в заголовке, uri обрезается до
этого знака, а все остальное складывается в аргументы. Попробовал
этот знак заменить на %3F, все стало ещё интереснее - в uri заменяются
на стороне nginx все символы "%" на "%25", в итоге выходит что-то вроде
"%253F" при передаче на следующий upstream.

Полагаю, если в имени файла встретится последовательность "\r\n", этот
файл вообще нельзя будет отправить в nginx с помощью X-Accel-Redirect.
В явном виде эта последовательность закончит uri в заголовке на себе,
а остаток имени будет следующим зоголовком, а в виде %0D%0A будет
превращена в %250D%250A.

В первом случае файл "aaa\r\nRefresh: 0;url=login" отправит клиента
по другому адресу, а во втором случае комбинацию никакой upstream не
разберет.

Вопрос как сейчас передавать в nginx с помощью X-Accel-Redirect
файлы в имени которых есть спец-символы?

Может стоит сделать отдельную опцию (что-нибудь в духе
safe_redirect on/off) при включении которой nginx не будет
дополнительно escape'ать uri в X-Accel-Redirect?

--93FB2808C9.1385344859/rl01.atservers.net--



Подробная информация о списке рассылки nginx-ru