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

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


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 ?

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



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