Proxy para serviço “backend” sempre que um arquivo não existe

3

Estou usando o NGINX para exibir arquivos estáticos.

Sempre que um arquivo não existir, quero que o NGINX acione um serviço de back-end do nodejs que tentará assíncrona recuperar esse arquivo.

O serviço de back-end precisa de 3 argumentos: o GUID , o tamanho e a extensão do arquivo. Todos esses argumentos são recuperados da solicitação original usando uma expressão regular.

Aqui está o meu arquivo de configuração atual do NGINX:

server {
  listen 80;
  server_name .example.com;
  root /var/www;

  ## Serves file (matching pattern: /<size>/<MEDIA>/<file na-me><.ext>)
  location / {
    location ~* ^/(\d+x\d+)/(([\w])([\w])([\w])[-\w]+)/[^\.]+\.(\w+)$ {
      try_files /$3/$4/$5/$2/$1.$6 @backend/$2/$1/$6;
    }
  }

  ## backend service
  location @backend {
    proxy_pass http://127.0.0.1:8080;
  }
}

Mas continuo recebendo este erro:

2012/01/23 11:53:31 [error] 28354#0: *1 could not find named location "@backend/ed3269d1-f9ef-4Ffc-dbea-5982969846c0/200x240/jpg", client: XXX.XXX.XXX.XXX, server: example.com, request: "GET /200x240/ed3269d1-f9ef-4Ffc-dbea-5982969846c0/my%20fil.jpg HTTP/1.1", host: "3.example.com"

Alguma ideia de como posso fazer com que o NGINX "proxy" a solicitação para o serviço de back-end, em vez de procurar um arquivo?

    
por ZogStriP 23.01.2012 / 12:12

1 resposta

2

Se você usar capturas nomeadas para as capturas, poderá usá-las para reescrever a solicitação em seu local nomeado:

server {
  listen 80;
  server_name .example.com;
  root /var/www;

  ## Serves file (matching pattern: /<size>/<MEDIA>/<file na-me><.ext>)
  location / {
    ## ?<name> assigns the capture to variable $name
    location ~* ^/(?<size>\d+x\d+)/(?<guid>([\w])([\w])([\w])[-\w]+)/[^\.]+\.(?<ext>\w+)$ {
      try_files /$3/$4/$5/$2/$1.$6 @backend;
    }
  }

  ## backend service
  location @backend {
    ## rewrite ... break; just sets $uri and doesn't perform a redirect.
    rewrite ^ /$guid/$size/$ext break;
    proxy_pass http://127.0.0.1:8080;
  }
}
    
por 23.01.2012 / 19:17