<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
</head>
<body text="#000000" bgcolor="#ccccff">
<br>
Приветствую, All<br>
<br>
Настраивал nginx фронтом к плону, наткнулся на грабли. Нжинкс не
эскейпит пробелы в запросах к бекэнду.<br>
Очень похоже на багу описанную здесь <a
href="http://forum.nginx.org/read.php?21,107888">http://forum.nginx.org/read.php?21,107888</a>
но немного в другой конфигурации. nginx version: nginx/0.8.44<br>
<br>
Если описать конфиг так:<br>
<br>
server {<br>
listen *:80;<br>
server_name tst.plone.lan site.plone.lan mgmt.plone.lan<br>
<br>
set $backend <a class="moz-txt-link-freetext" href="http://localhost:8080">http://localhost:8080</a>;<br>
set $zope_prefix
/VirtualHostBase/http/$host/w/Site.Plone.Lan/Main/VirtualHostRoot;<br>
<br>
location / {<br>
proxy_set_header Host $host;<br>
proxy_pass $backend$zope_prefix$uri;<br>
}<br>
}<br>
<br>
То нжинкс передает запросы в зоп заменяя исходные %20 на "пробелы".<br>
<br>
В логах нжинкса запрос выглядит как <br>
<br>
192.168.1.20 - - [23/Jul/2010:16:20:36 +0400] "GET
/portal_javascripts/Plone%20Tableless/toc.js HTTP/1.1" 200 2129 "-"
"Opera/9.80 (X11; Linux i686; U; en) Presto/2.5.29 Version/10.60"<br>
<br>
А в зоп он приходит так<br>
127.0.0.1 - Anonymous [23/Jul/2010:16:23:39 +0400] "GET
/VirtualHostBase/http/site.plone.lan/w/Site.Plone.Lan/Main/VirtualHostRoot/portal_javascripts/Plone
Tableless/toc.js HTTP/1.0" 400 269
<a class="moz-txt-link-rfc2396E" href="http://lbg.pik.ru/kupit-kvartiru">"http://lbg.pik.ru/kupit-kvartiru"</a> "Mozilla/5.0 (compatible;
Konqueror/4.4; Linux) KHTML/4.4.5 (like Gecko) SUSE"<br>
<br>
т.е. пробел в строке /Plone Tableless/ передается в виде именно
пробела.<br>
<br>
Если описать конфиг так:<br>
<br>
server {<br>
listen *:80;<br>
server_name tst.plone.lan site.plone.lan mgmt.plone.lan<br>
<br>
location / {<br>
rewrite ^/(.*)$
/VirtualHostBase/http/$host/w/Site.Plone.Lan/Main/VirtualHostRoot/$1
break;<br>
<br>
proxy_set_header Host $host;<br>
proxy_pass <a class="moz-txt-link-freetext" href="http://localhost:8080">http://localhost:8080</a>;<br>
}<br>
}<br>
<br>
то все работает нормально, все пробелы в урлах преобразуются в %20.
Однако хотелось бы использовать переменные в proxy_pass и избавится
от лишних реврайтов.<br>
<br>
Или я где-то что-то пропустил или одно из двух.<br>
Буду признателен за помощь.<br>
<br>
<br>
<pre class="moz-signature" cols="72">--
------------------------------
Emil Muratov
</pre>
</body>
</html>