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