Frage Wie kann ich Nginx-Speicherorte für gemeinsame Konfigurationsoptionen konfigurieren?


Wie kann ich einen freigegebenen 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 nun auf /api/0.1/user zugreife, bekomme ich 404, weil die Anfrage nicht an 127.0.0.1:9000 übergeben wird


36
2018-03-26 18:56


Ursprung




Antworten:


Erstellen Sie eine allgemeine Proxy-Konfiguration und fügen Sie sie bei 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;
}
...

45
2018-03-26 22:40



+1, aber nur eine Anmerkung: Es stellt sich heraus, dass Sie eine ganze Reihe von Konfigurationen auf diese Weise einschließlich des gesamten Standortes einbeziehen können nginx.org/en/docs/ngx_core_module.html#include - equivalent8
... oder mein Beispiel github.com/equivalent/scrapbook2/tree/master/examples/... - equivalent8


Die meisten Konfigurationsvariablen von proxy_ * sind auch im Serverkontext zulässig, sodass Sie sie verschieben können, um dieselben Einstellungen für mehrere Standorte zu verwenden.

Proxy_pass sollte jedoch nur innerhalb des Standorts verwendet werden. Sie sollten also mindestens diese Direktive an jedem Ort haben und optional die Werte einiger zusätzlicher proxy_ * vars überschreiben.


11
2018-03-26 20:10



Dies funktioniert nicht, wenn Sie standortspezifisch sind proxy_set_header Direktiven "Diese Direktiven werden genau dann von der vorherigen Ebene vererbt, wenn auf der aktuellen Ebene keine proxy_set_header-Anweisungen definiert sind." nginx.org/de/docs/http/... - Emerson Farrugia