Як я можу налаштувати nginx місця для спільного використання загальних параметрів конфігурації?


37

Як я можу налаштувати загальний блок конфігурацій для набору локацій?

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

Тепер, якщо я спробую отримати доступ до /api/0.1/user, я отримаю 404, оскільки він не передає запит на 127.0.0.1:9000

Відповіді:


53

Створіть загальний конфігурацію проксі-сервера та включіть за потребою

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

Файл конфігурації хоста

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

1
+1, але лише одна примітка: виявляється, ви можете включити цілу купу конфігурацій таким чином, включаючи всю локацію nginx.org/en/docs/ngx_core_module.html#include
еквівалент8


11

Більшість змінних конфігурацій proxy_ * також дозволено в контексті сервера, тому ви можете перемістити їх вгору для обміну одними і тими ж параметрами в декількох місцях.

Однак proxy_pass слід використовувати лише в межах місця розташування. Таким чином, ви повинні мати принаймні цю директиву в кожному розташуванні, необов'язково переважаючи значення деяких додаткових proxy_ * vars.


Це не спрацює, якщо у вас є proxy_set_headerдирективи, що стосуються місцеположення, оскільки "Ці директиви успадковуються від попереднього рівня, якщо і лише тоді, коли на поточному рівні немає визначених директив proxy_set_header." nginx.org/uk/docs/http/…
Емерсон
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.