Re: Попытка миграции 0.7 -> 0.8 БАГИ

Maxim Dounin mdounin на mdounin.ru
Чт Апр 8 14:47:14 MSD 2010


Hello!

On Thu, Apr 08, 2010 at 02:19:28PM +0400, Илья Винокуров wrote:

> 
> Thu, 8 Apr 2010 14:06:20 +0400 письмо от Maxim Dounin <mdounin at mdounin.ru>:
> > eval - это на самом деле location, а такая форма proxy_pass 
> > предполагает замену части URI соответствующей location'у на 
> > указанную в proxy_pass (остальное - сохраняется).
> > 
> > To Valery: а я ведь предупреждал, магия - это плохо...
> 
> У каждой магии есть свои побочные эффекты.
> В данном случае магия настолько сильная, что ради нее можно и учитывать
> этот побочный эффект, например так:
> 
> location ^~ /POST/ {
> eval $swa_val {
> proxy_pass http://127.0.0.1:8090/lib/script.ssi?;

Правильно так (используя вариант proxy_pass без uri):

    rewrite ^ /lib/script.ssi? break;
    proxy_pass http://127.0.0.1:8090;

или так (используя вариант proxy_pass с переменными, задающими 
запрос полностью):

    set $empty "";
    proxy_pass http://127.0.0.1:8090/lib/script.ssi$empty;

> [...]
> 
> # nc -l 127.0.0.1 8090
> GET /lib/script.ssi?pl HTTP/1.0
> Host: 127.0.0.1:8090
> 
> Что дает нам в руки костыль для этой ситуации...
> Но осадок все же остается...
> 
> А что Вы, Максим, можете предложить взамен этой магии?

Именно то что я и предлагал исходно - честно позволять задавать 
uri подзапроса, как это делается в addition module 
(add_before_body, add_after_body), ssi и т.п.

В данном случае это позволило бы не только избежать проблем с 
пониманием "откуда грабли", но и сэкономить ресурсы на ненужных 
преобразованиях uri:

    location ... {
        eval $swa_val /lib/script.ssi;
        ...
    }

    location = /lib/script.ssi {
        internal;
        proxy_pass http://127.0.0.1:8090;
    }

> Кстати, эта конфигурация корректно работает в 0.7 версии.

Что лишь ухудшает ситуацию.

Maxim Dounin



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