Для 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
}
}