Re: Странности с регэкспами в локейшне

Валентин Бартенев vbart at nginx.com
Thu Jan 17 14:48:14 UTC 2013


On Thursday 17 January 2013 18:45:55 Валентин Бартенев wrote:
> On Thursday 17 January 2013 17:58:47 Михаил Монашёв wrote:
> > Здравствуйте.
> > 
> > nginx version: nginx/1.3.11
> > configure arguments: --prefix=/usr/local/etc/nginx --with-cc-opt='-I
> > /usr/local/include' --with-ld-opt='-L /usr/local/lib'
> > --conf-path=/usr/local/etc/nginx/nginx.conf
> > --sbin-path=/usr/local/sbin/nginx --pid-path=/var/run/nginx.pid
> > --error-log-path=/var/log/nginx-error.log --user=www --group=www
> > --with-debug --with-file-aio
> > --http-client-body-temp-path=/var/tmp/nginx/client_body_temp
> > --http-fastcgi-temp-path=/var/tmp/nginx/fastcgi_temp
> > --http-proxy-temp-path=/var/tmp/nginx/proxy_temp
> > --http-scgi-temp-path=/var/tmp/nginx/scgi_temp
> > --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi_temp
> > --http-log-path=/var/log/nginx-access.log --with-http_image_filter_module
> > --with-http_stub_status_module --with-pcre
> > 
> > Вот такой конфиг
> > 
> >                 location ~* "^/([a-z0-9\-\.]+)/(.*)" {
> >                 
> >                         proxy_pass              http://$1:80/$2;
> >                         proxy_set_header        Host    $1;
> >                         proxy_set_header        Referer "http://$1/";
> >                         proxy_set_header        X-Real-IP       "";
> >                         proxy_set_header        Cookie          "";
> >                         proxy_ignore_headers    X-Accel-Redirect
> > 
> > X-Accel-Expires X-Accel-Limit-Rate X-Accel-Buffering X-Accel-Charset
> > Expires Cache-Control Set-Cookie;
> > 
> >                         proxy_hide_header       Location;
> >                         proxy_hide_header       Set-Cookie;
> >                         proxy_hide_header       WWW-Authenticate;
> >                         
> >                         proxy_intercept_errors  on;
> >                         error_page              301 302 400 401 402 403
> >                         404
> > 
> > 405 406 407 408 409 410 411 412 413 414 415 416 417 422 423 424 425 426
> > 449 500 501 502 503 504 505 506 507 509 510 = @zero;
> > 
> >                         proxy_temp_path         /optcache3/proxy-tmp;
> >                         proxy_cache_key         "$1/$2";
> >                         proxy_cache             optcache3;
> >                         
> >                         image_filter            test;
> >                         image_filter_buffer     10M;
> >                 
> >                 }
> >                 
> >                 location / {
> >                 
> >                         return  403;
> >                 
> >                 }
> >                 
> >                 location @zero {
> >                 
> >                         return  204;
> >                 
> >                 }
> > 
> > приводит в ошибкам:
> > 2013/01/17 17:47:08 [error] 1380#0: *1290729 no host in upstream ":80/",
> > client: 65.55.215.62, server: i99.beon.ru, request: "GET
> > /images5.fanpop.com/image/photos/31100000/Sunggyu-infinite-EC-9D-B8-ED-94
> > - BC-EB-8B-88-ED-8A-B8-31133110-245-182.gif HTTP/1.1", host:
> > "i99.beon.ru"
> > 
> > т.е.  в  $1  почему-то  хост  теряется.  Есть  выше в конфиге ещё один
> > локейшн  с  регэкспами,  но  он  ведь выше и потому должен срабатывать
> > раньше.
> > 
> > Причём, если я запрос повторяю, то картинка открывается нормально.
> 
> [...]
> 
> Вероятно в конфигурации есть ещё какая-нибудь директива с регулярным
> выражением, которая наследуется с уровня выше и тоже отрабатывает в этом
> location-е.
> 
> Подозреваю valid_referers ?
> 

А нет, valid_referers тут скорее не причем. Значит что-то ещё.

--
Валентин Бартенев
http://nginx.com/support.html
http://nginx.org/en/donation.html



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