<div dir="ltr">Доброго Ð´Ð½Ñ Ð²Ñем!<div><br></div><div>РебÑÑ‚, подÑкажите - имеетÑÑ Ñ‚Ð°ÐºÐ¾Ð¹ вопроÑ..</div><div><br></div><div>INTRO: </div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div>Mono. ЕÑть приложение, на которое nginx прокÑирует запроÑÑ‹. И еÑть один не-ÑовÑем-адекватный клиент, который у Ñтого Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð·Ð°Ð¿Ñ€Ð°ÑˆÐ¸Ð²Ð°ÐµÑ‚ wsdl прежде, чем воÑпользоватьÑÑ Ð°Ð¿Ð¸ÑˆÐºÐ¾Ð¹.. перед каждым запроÑом... и делает Ñто Ñ Ñ‡Ð°Ñтотой ~200 запроÑов в минуту (на каждый полезный Ð·Ð°Ð¿Ñ€Ð¾Ñ - вот Ñтот вот Ñорный Ð·Ð°Ð¿Ñ€Ð¾Ñ wsdl'ки, который впуÑтую напрÑгает приложение)</div>
</blockquote><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div>ВозможноÑти повлиÑть на клиента нет. Ð’Ñ€ÐµÐ¼Ñ Ð¿Ð¾Ð´ÑтавлÑть коÑтыли...</div></blockquote><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px">
<div><br></div></blockquote><div>WORKAROUND:</div><div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div>Раз возможноÑти повлиÑть на клиента нет, было принÑто решение обмануть его (Ð½Ð¾Ñ€Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ Ð¿Ñ€Ð°ÐºÑ‚Ð¸ÐºÐ°, что =) ): вмеÑто поÑтоÑнной генерации wsdl'ки на Ñтороне Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ - отдавать nginx'ом ÑтатичеÑкий файл, Ñодержащий её контент (еÑли в параметрах запроÑа имеетÑÑ ?wsdl, еÑли его нет - то прокÑировать на приложение). Было Ñделано что-то вроде Ñледующего:</div>
<div><br></div><div><div><span class="" style="white-space:pre"> </span>location = /some/app/url/messenger.asmx {</div><div><span class="" style="white-space:pre"> </span> Â Â if ( $args ~* wsdl ) {</div><div><span class="" style="white-space:pre"> </span>return 301 /some/app/url/static/messengerwsdl.xml;<br>
</div><div><span class="" style="white-space:pre"> </span>   }</div></div></blockquote><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div>          proxy_pass     <a href="http://server1:8080">http://server1:8080</a>;</div>
</blockquote></div><div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div><div><span class="" style="white-space:pre"> </span>}</div></div><div><br></div></blockquote><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px">
где /some/app/url/static/ - Ñмотрит на папку Ñо Ñтатикой, обрабатываемую nginx'ом, а messengerwsdl.xml - тот Ñамый файл Ñ ÐºÐ¾Ð½Ñ‚ÐµÐ½Ñ‚Ð¾Ð¼ wsdl'ки.<br>работало вÑÑ‘ проÑто замечательно, но..<br><br></blockquote>PROBLEMS:</div>
<div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div>..оказалоÑÑŒ, что клиент, запрашивавший wsdl, не умеет работать Ñ Ñ€ÐµÐ´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ð¼ :( </div></blockquote><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px">
<div>Ð Ñ‚.к. повлиÑть на клиента возможноÑти нет - пришлоÑÑŒ чеÑать затылок.</div></blockquote></div><div><br></div>GOALS:<div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div>Можно ли Ñделать нечто подобное <u>без перенаправлений</u> ? </div>
<div>Что пробовалоÑÑŒ: положить файл в папку Ñтатики по пути, аналогичным location и Ñ Ñ‚ÐµÐ¼ же именем, и поменÑть $document_root в блоке if'a, но: из if'a тоже надо как-то выходить - break не годитÑÑ (обработка пойдет дальше по локейшену и в результате - Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð±ÑƒÐ´ÐµÑ‚ прокÑирован), return не годитÑÑ (клиент не понимает редиректов), rewrite... а ÑмыÑл? вÑе равно в итоге return new location.</div>
</blockquote><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div>Ð’ Ñтом ÑмыÑле, наверное, неплохо впиÑалÑÑ Ð±Ñ‹ try_files в блоке if'a... но он внутри директивы if запрещён.</div><div><br></div></blockquote>
Может, ещё какие-нибудь варианты? И могут ли они быть в принципе.</div><div>ЕÑли что-то было не ÑÑно в опиÑании - могу на пÑевдопримерах поÑÑнить. Рпока - вот:</div><div><div><br></div><div>#$ nginx -V</div><div>nginx version: nginx/1.0.15</div>
<div>built by gcc 4.4.6 20110731 (Red Hat 4.4.6-3) (GCC)Â </div><div>TLS SNI support enabled</div><div>configure arguments: --prefix=/usr/share/nginx --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --http-client-body-temp-path=/var/lib/nginx/tmp/client_body --http-proxy-temp-path=/var/lib/nginx/tmp/proxy --http-fastcgi-temp-path=/var/lib/nginx/tmp/fastcgi --http-uwsgi-temp-path=/var/lib/nginx/tmp/uwsgi --http-scgi-temp-path=/var/lib/nginx/tmp/scgi --pid-path=/var/run/nginx.pid --lock-path=/var/lock/subsys/nginx --user=nginx --group=nginx --with-file-aio --with-ipv6 --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_xslt_module --with-http_image_filter_module --with-http_geoip_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_degradation_module --with-http_stub_status_module --with-http_perl_module --with-mail --with-mail_ssl_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic' --with-ld-opt=-Wl,-E</div>
<div><br></div><div><div>#$ lsb_release -a</div><div>LSB Version:<span class="" style="white-space:pre"> </span>:core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-noarch</div>
<div>Distributor ID:<span class="" style="white-space:pre"> </span>CentOS</div><div>Description:<span class="" style="white-space:pre"> </span>CentOS release 6.2 (Final)</div><div>Release:<span class="" style="white-space:pre"> </span>6.2</div>
<div>Codename:<span class="" style="white-space:pre"> </span>Final</div></div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div><br></div><div><br></div></blockquote>СпаÑибо!<br><br></div></div>