Wie kann ich Nginx-Speicherorte konfigurieren, um gemeinsame Konfigurationsoptionen freizugeben?

37

Wie kann ich einen gemeinsam genutzten Konfigurationsblock für eine Reihe von Standorten konfigurieren?

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

Wenn ich jetzt versuche, auf /api/0.1/user zuzugreifen, erhalte ich 404, da die Anfrage nicht an 127.0.0.1:9000 weitergeleitet wird

netbrain
quelle

Antworten:

53

Erstellen Sie eine gemeinsame Proxy-Konfiguration und fügen Sie sie nach Bedarf hinzu.

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

Ihre Host-Konfigurationsdatei

...
location /api/0.1/user {
    include /etc/nginx/api_proxy.conf;
    proxy_cache_key /user/$http_authorization;
}
...
Schlittenjunge
quelle
1
1, aber nur eine Note: Fallen Sie kann einschließlich der gesamten Lage ganzer Reihe von Konfigurations auf diese Weise schließen nginx.org/en/docs/ngx_core_module.html#include
equivalent8
11

Die meisten proxy_ * -Konfigurationsvariablen sind auch im Serverkontext zulässig, sodass Sie sie nach oben verschieben können, um dieselben Einstellungen an mehreren Standorten zu verwenden.

Proxy_pass sollte jedoch nur innerhalb von location verwendet werden. Sie sollten also mindestens diese Anweisung an jedem Speicherort haben und optional die Werte einiger zusätzlicher proxy_ * -Vars überschreiben.

Vadym S. Khondar
quelle
Dies funktioniert nicht, wenn Sie über standortspezifische proxy_set_headerAnweisungen verfügen, da "Diese Anweisungen werden nur dann von der vorherigen Ebene geerbt, wenn auf der aktuellen Ebene keine proxy_set_header-Anweisungen definiert sind." nginx.org/en/docs/http/…
Emerson Farrugia