ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

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


  • To: nginx-ru@xxxxxxxxx
  • Subject: Странности с регэкспами в локейшне
  • From: Михаил Монашёв <postmaster@xxxxxxxxxxxxx>
  • Date: Thu, 17 Jan 2013 17:58:47 +0400
  • Dkim-signature: v=1; a=rsa-sha1; c=relaxed; d=softsearch.ru; h=date:from :reply-to:message-id:to:subject:mime-version:content-type :content-transfer-encoding; s=main; i=postmaster@xxxxxxxxxxxxx; bh=Myeb1ZthNo0oTJ13T28qA3s0dUU=; b=TFr4Eq3DuxnHLBDVdREPCYTIY2XY WzW8lrwi07aoGnSnpOI7oN5rvEcMsJ86d1bz/3QcQ9+7E4/qT/fCEg5QbSHRu9+b A8Ego7Y5qwRtslzKiY/7UZnj25Cilq0CYtUkpFqwk3foOqB7Fk/hzUirmXerEaSO b1MaOwkiLttrvTo=
  • Domainkey-signature: a=rsa-sha1; c=nofws; d=softsearch.ru; h=date:from :reply-to:message-id:to:subject:mime-version:content-type :content-transfer-encoding; q=dns; s=main; b=JWxRCvhdRlZm/b60e8Q me7rF7oQXSF/feWjloQFm1cpDAeOiCYstMwTrnurx00KbODUeWdC/LBlMZlb8M/e jSms4nwPzpweAWwNbygXIhn0hDx/Z71SnW5vBv6mfJAn0m30+Th2H/9W5256xHxL s4K6lR1dFv4WTICY7tRDhJXM=

Здравствуйте.

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 ~* "^/(?<phost>[a-z0-9\-\.]+)/(?<puri>.*)" {
                        proxy_pass              http://$phost:80/$puri;
                        proxy_set_header        Host    $1;
                        proxy_set_header        Referer "http://$phost/";;
                        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         "$phost/$puri";
                        proxy_cache             optcache3;

                        image_filter            test;
                        image_filter_buffer     10M;

                }

                location / {
                        return  403;
                }

                location @zero {
                        return  204;
                }

Проблема пропала. На более ранних версиях nginx-а проблемы вроде не
было, хотя не уверен.


-- 
С уважением,
 Михаил                          mailto:postmaster@xxxxxxxxxxxxx

_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://mailman.nginx.org/mailman/listinfo/nginx-ru


 




Copyright © Lexa Software, 1996-2009.