идентификатор запроса в nginx

Andrew Kopeyko kaa at zvuki.ru
Tue May 22 13:52:26 MSD 2007


On Tue, 22 May 2007, Rommer wrote:

> Здравствуйте,
>
> Igor Sysoev wrote:
>> On Thu, May 10, 2007 at 01:07:24PM +0300, Rommer wrote:
>> 
>>> Есть ли какая-нибудь рандомная переменная в nginx, которая уникально 
>>> идентифицирует каждый запрос?
>>> Например как $remote_port, только чтобы скрипты на бэкенде её узнать не 
>>> могли.
>> 
>> Запрос - нет, соденинения - да: $connection.
>> 
>
> Ладно опишу задачу.
> Есть такой замечательный модуль mod_aclr (http://miksir.pp.ru/?r=69) для 
> apache 1.3,
> я его переписал для apache 2.0 и хочу использовать. Вот его минимальная 
> конфигурация
> для nginx'а:
>
> location / {
> 	proxy_pass          http://127.0.0.1:80;
> 	proxy_set_header    X-Accel-Internal /internal_xxx;
> }
> location /internal_xxx/ {
> 	internal;
> 	rewrite    ^/internal_xxx/(.*)$ /$1 break;
> 	root        /;
> }
>
>
> В отличие от оригинального модуля, мой выдает содержимое X-Accel-Internal + 
> полный путь
> к файлу, а не X-Accel-Internal + get-запрос, который пришёл в httpd в случае 
> статического
> файла. + скрывает для скриптов содержимое заголовка X-Accel-Internal.
> Но в этой конфигурации есть дыра: если скрипт на стороне бэкенда выдаст,

Может, проще будет уточнить root ?
Сейчас, действительно, nginx отдаст /etc/passwd

Ежели не получится ограничиться одним значением root - опишите несколько 
локейшенов с признаком internal и\или используйте map

Мне кажется, это более простой и более наглядный путь, нежели выбранные 
вами пляски вокруг несуществующего (пока?) $request_key.

> например,
> X-Accel-Redirect: /internal_xxx/etc/passwd, то nginx спокойно его и отдаст в 
> браузер.
> Я решил обойти это следующим способом:


-- 
Best regards,
Andrew Kopeyko <kaa at zvuki.ru>






More information about the nginx-ru mailing list