Всем привет, опять столкнулся с той же проблемой с экранированием. nginx 0.5.35<br><br>Имеем запрос /cgi-bin/script.pl?a=b<br><br>Если nginx не находит предварительно сгенеренный /Data/static/$host/script.pl_a_b (ну, к примеру, для этого виртхоста него нет), то он обращается к memcached.<br>
И вот если и там такого ключа нет, то идет обращение на бэкенд. Тут и начинается самое интересное.<br>На бэкенд передается запрос GET /cgi-bin/script.pl%3fa=b<br><br> Кусок конфига:<br><br>if ($request_uri = '/cgi-bin/script.pl?a=b') {<br>
rewrite ^(.*)$ /static/script.pl_a_b? last;<br>}<br><br>location = /static/script.pl_a_b {<br> if ($request_method = POST) {<br> rewrite ^(.*)$ $request_uri;<br> proxy_pass <a href="http://backend">http://backend</a>;<br>
}<br><br> if (!-e /Data/static/$host/script.pl_a_b) {<br> rewrite ^(.*)$ /memcached_generic;<br> }<br><br> types { }<br> default_type text/html;<br> alias /Data/static/$host/script.pl_a_b;<br>
internal;<br>}<br><br>location = /memcached_generic {<br> set $memcached_key "$host$request_uri";<br> memcached_pass memcached;<br> error_page 404 502 504 405 = @fallback;<br>}<br><br>
location @fallback {<br> rewrite ^(.*)$ $request_uri break;<br> proxy_set_header Host $host;<br> proxy_pass <a href="http://backend">http://backend</a>;<br>}<br><br>