Nginx, redirecionando um bloco de localização para outro

3

Para uri começar com / c /, eu quero fazer um teste de chave memcached e retornar o valor da chave, se existir. Se não houver chave, ela deve passar para o proxy.

Eu faço isso com esta diretiva:

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
}

Para todas as outras solicitações, quero que elas passem para o mesmo proxy. Eu faço isso com a diretriz abaixo:

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

E minha localização @proxy é esta:

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

Como visto, @proxy é o mesmo com / . Eu não quero copiar e colar minha configuração de proxy. Em vez disso, quero redirecionar o local / para @proxy . Como posso redirecionar um bloco de localização para outro? Como posso me livrar da configuração duplicada do proxy?

    
por Umut Benzer 25.01.2012 / 11:17

1 resposta

2

A melhor coisa a fazer seria colocar todas as configurações de proxy comuns no servidor, e você terá apenas um proxy_pass em cada local. Você também pode usar um upstream para evitar o endereço: port em vários lugares:

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
    }
}
    
por 25.01.2012 / 13:55