Назад | Перейти на главную страницу

Nginx, перенаправляя блок местоположения на другой

Для uri, начинающегося с / c /, я хочу провести тест ключа memcached и вернуть значение ключа, если оно существует. Если ключа нет, он должен передать его прокси.

Я делаю это с помощью этой директивы:

location ^~ /c/ {
    set $memcached_key "prefix:$request_uri";
    memcached_pass 127.0.0.1:11211;

    default_type       application/json;
    error_page 404 405 502 = @proxy
}

Для всех остальных запросов я хочу, чтобы они передавались на тот же прокси. Я делаю это с помощью приведенной ниже директивы:

location / {
    proxy_pass       http://127.0.0.1:5555;
    proxy_redirect   off; 
    proxy_set_header Host $host; 
    proxy_set_header X-Real_IP $remote_addr; 
    proxy_set_header X-Forwarded_For $proxy_add_x_forwarded_for;
}

И мой @proxy расположение это:

location @proxy {
    proxy_pass       http://127.0.0.1:5555;
    proxy_redirect   off; 
    proxy_set_header Host $host; 
    proxy_set_header X-Real_IP $remote_addr; 
    proxy_set_header X-Forwarded_For $proxy_add_x_forwarded_for;
}

Как видно, @proxy то же самое с / . Я не хочу копировать и вставлять конфигурацию моего прокси. Вместо этого я хочу перенаправить местоположение / к @proxy. Как я могу перенаправить один блок местоположения на другой? Как мне избавиться от дублирующейся конфигурации прокси?

Проще всего было бы поместить все общие настройки прокси на сервер, тогда у вас будет только proxy_pass в каждом месте. Вы также можете использовать восходящий поток, чтобы избежать адреса: порт в нескольких местах:

upstream _backend {
    server 127.0.0.1:5555;
}

server {
    proxy_redirect   off; 
    proxy_set_header Host $host; 
    proxy_set_header X-Real_IP $remote_addr; 
    proxy_set_header X-Forwarded_For $proxy_add_x_forwarded_for;

    location / {
        proxy_pass       http://_backend;
    }

    location @proxy {
        proxy_pass       http://_backend;
    }

    location ^~ /c/ {
        set $memcached_key "prefix:$request_uri";
        memcached_pass 127.0.0.1:11211;

        default_type       application/json;
        error_page 404 405 502 = @proxy
    }
}