nginx: enviar diretamente do local para outro local nomeado

1

No meu arquivo nginx 1.12.2 conf, eu tenho:

upstream app {
  server unix:/tmp/app.sock  fail_timeout=0;
}

server {
  listen 443 deferred;

  root /some/dir;

  try_files $uri @app;

  # If the request is for the naked domain, just serve the index bundle
  # without going through Rails
  #
  location = / {
    try_files /index.html =404;
  }

  # If the request if for the /api prefix, go directly to Rails.
  # This location block is not strictly required, but it could be a handy
  # customization hook for extra headers and settings.
  #
  location /api/ {
    # Extra conf!
    try_files @app;
  }

  # The location directory allows very creative configurations.
  # http://nginx.org/en/docs/http/ngx_http_core_module.html#location
  #
  # This is just a named location to be used in try_files.
  location @app {
    proxy_pass_request_headers on;
    proxy_set_header ...
    proxy_pass http://app;
  }
}

Lá, isso não está certo porque tem um único argumento:

  location /api/ {
    # Extra conf!
    try_files @app;
  }

... mas comunica bem o que estou tentando alcançar. Eu suponho que eu poderia obter try_files para trabalhar, adicionando um arquivo não-esitente antes do último argumento.

A try_files é a única maneira de fazer isso ou existe outra diretriz mais idiomática?

    
por tompave 17.04.2018 / 19:44

1 resposta

1

Seu esquema não funcionará. Quando nginx se instala no bloco location final para processar a solicitação, ele usará as "configurações e cabeçalhos" que estão no escopo, que podem ser herdados de um bloco adjacente, mas não será inclua quaisquer "cabeçalhos e configurações extras" dos blocos irmãos - independentemente do processo usado para encontrar o bloco location final. Consulte este documento para saber mais.

Se você tiver instruções comuns aplicáveis a vários locais, poderá transferi-las para um arquivo separado e incluí-las quando necessário. Por exemplo:

location / {
    try_files $uri @app;
}
location /api/ {
    # Extra conf!
    include my/proxy/conf;
}
location @app {
    include my/proxy/conf;
}

Veja este documento para saber mais.

    
por 18.04.2018 / 10:42

Tags