Como posso configurar locais nginx para compartilhar opções de configuração comuns?

37

Como posso configurar um bloco de configuração compartilhado para um conjunto de locais?

    location / {

            proxy_pass        http://127.0.0.1:9000/;
            proxy_redirect    off;
            proxy_set_header  Host             $http_host;
            proxy_set_header  X-Real-IP        $remote_addr;
            proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;

            proxy_cache cache-test;
            proxy_cache_valid 200 302 24h;
            proxy_cache_valid 404 60s;
            add_header X-Cache-Status $upstream_cache_status;

    }


    location /api/0.1/user{
            proxy_cache_key /user/$http_authorization;
    }

Agora, se eu tentar acessar o /api/0.1/user, receberei 404 porque ele não passa a solicitação para 127.0.0.1:9000

netbrain
fonte

Respostas:

54

Crie uma configuração de proxy comum e inclua conforme necessário.

/etc/nginx/api_proxy.conf

proxy_pass        http://127.0.0.1:9000/;
proxy_redirect    off;
proxy_set_header  Host             $http_host;
proxy_set_header  X-Real-IP        $remote_addr;
proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;

proxy_cache cache-test;
proxy_cache_valid 200 302 24h;
proxy_cache_valid 404 60s;
add_header X-Cache-Status $upstream_cache_status;

Seu arquivo de configuração do host

...
location /api/0.1/user {
    include /etc/nginx/api_proxy.conf;
    proxy_cache_key /user/$http_authorization;
}
...
SleighBoy
fonte
1
+1, mas apenas uma nota: Acontece que você pode incluir toda bando de configuração desta forma, incluindo todo o local nginx.org/en/docs/ngx_core_module.html#include
equivalent8
11

A maioria das variáveis ​​de configuração proxy_ * também é permitida no contexto do servidor, para que você possa movê-las para compartilhar as mesmas configurações em vários locais.

No entanto, proxy_pass deve ser usado apenas dentro do local. Portanto, você deve ter pelo menos essa diretiva em cada local, substituindo opcionalmente os valores de alguns proxy_ * vars extras.

Vadym S. Khondar
fonte
Isso não funcionará se você tiver proxy_set_headerdiretivas específicas de local porque "Essas diretivas são herdadas do nível anterior se, e somente se, não houver diretivas proxy_set_header definidas no nível atual". nginx.org/en/docs/http/...
Emerson Farrugia