Nginx,将一个位置块重定向到另一个

Umu*_*zer 6 nginx reverse-proxy

对于以 /c/ 开头的 uri,我想做一个 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
}
Run Code Online (Sandbox Code Playgroud)

对于所有其他请求,我希望它们传递给同一个代理。我用下面的指令来做:

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;
}
Run Code Online (Sandbox Code Playgroud)

我的@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;
}
Run Code Online (Sandbox Code Playgroud)

正如所见,@proxy/. 我不想复制粘贴我的代理配置。相反,我想将位置重定向/@proxy. 如何将一个位置块重定向到另一个?如何摆脱代理的重复配置?

kol*_*ack 5

最简单的方法是将所有通用代理设置放入服务器,然后您将在每个位置都有一个 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
    }
}
Run Code Online (Sandbox Code Playgroud)