Come posso configurare le posizioni nginx per condividere le opzioni di configurazione comuni?


37

Come posso configurare un blocco di configurazione condiviso per un set di posizioni?

    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;
    }

Ora se provo ad accedere a /api/0.1/user allora otterrò 404 perché non passa la richiesta a 127.0.0.1:9000

Risposte:


54

Crea una configurazione proxy comune e includi se necessario.

/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;

Il tuo file di configurazione host

...
location /api/0.1/user {
    include /etc/nginx/api_proxy.conf;
    proxy_cache_key /user/$http_authorization;
}
...

1
+1, ma solo una nota: si scopre che è possibile includere un sacco di configurazioni in questo modo inclusa l'intera posizione nginx.org/en/docs/ngx_core_module.html#include
equivalente8


11

La maggior parte delle variabili di configurazione proxy_ * è consentita anche nel contesto del server, quindi è possibile spostarle verso l'alto per condividere le stesse impostazioni su più posizioni.

Tuttavia, proxy_pass deve essere utilizzato solo all'interno della posizione. Quindi dovresti avere almeno questa direttiva in ogni posizione, facoltativamente sovrascrivendo i valori di alcuni proxy_ * extra.


Questo non funzionerà se si dispone di proxy_set_headerdirettive specifiche della posizione perché "Queste direttive sono ereditate dal livello precedente se e solo se non esistono direttive proxy_set_header definite al livello corrente." nginx.org/it/docs/http/…
Emerson Farrugia il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.