¿Cómo puedo configurar ubicaciones nginx para compartir opciones de configuración comunes?


37

¿Cómo puedo configurar un bloque de configuración compartido para un conjunto de ubicaciones?

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

Ahora, si intento acceder a /api/0.1/user, obtendré 404 porque no pasa la solicitud a 127.0.0.1:9000

Respuestas:


54

Cree una configuración de proxy común e incluya según sea necesario.

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

Su archivo de configuración de host

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

1
+1, pero solo una nota: resulta que puede incluir un montón de configuraciones de esta manera, incluida la ubicación completa nginx.org/en/docs/ngx_core_module.html#include
equivalente8


11

La mayoría de las variables de configuración de proxy_ * también están permitidas dentro del contexto del servidor, por lo que puede moverlas hacia arriba para compartir la misma configuración en varias ubicaciones.

Sin embargo, proxy_pass solo debe usarse dentro de la ubicación. Por lo tanto, debe tener al menos esta directiva dentro de cada ubicación, opcionalmente anulando los valores de algunos proxy_ * vars adicionales.


Esto no funcionará si tiene proxy_set_headerdirectivas específicas de ubicación porque "Estas directivas se heredan del nivel anterior si y solo si no hay directivas proxy_set_header definidas en el nivel actual". nginx.org/en/docs/http/…
Emerson Farrugia
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.