Comment puis-je configurer les emplacements nginx pour partager les options de configuration communes?

37

Comment puis-je configurer un bloc de configuration partagé pour un ensemble d'emplacements?

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

Maintenant, si j’essaie d’accéder à /api/0.1/user, j’obtiendrai 404 car il ne transmet pas la demande à 127.0.0.1:9000

netbrain
la source

Réponses:

54

Créez une configuration de proxy commune et incluez-la si nécessaire.

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

Votre fichier de configuration hôte

...
location /api/0.1/user {
    include /etc/nginx/api_proxy.conf;
    proxy_cache_key /user/$http_authorization;
}
...
SleighBoy
la source
1
+1, mais une remarque: vous pouvez inclure toute une configuration de cette manière, y compris l'emplacement complet nginx.org/en/docs/ngx_core_module.html#include
equivalent8
11

La plupart des variables de configuration proxy_ * sont également autorisées dans le contexte du serveur. Vous pouvez donc les déplacer pour partager les mêmes paramètres sur plusieurs emplacements.

Toutefois, proxy_pass ne doit être utilisé que dans l'emplacement. Vous devriez donc avoir au moins cette directive dans chaque emplacement, en remplaçant éventuellement les valeurs de certains variables supplémentaires proxy_ *.

Vadym S. Khondar
la source
Cela ne fonctionnera pas si vous avez des proxy_set_headerdirectives spécifiques à l'emplacement car "Ces directives sont héritées du niveau précédent si et seulement si aucune directive proxy_set_header n'est définie au niveau actuel". nginx.org/fr/docs/http/…
Emerson Farrugia Le