对于以/ c /开头的uri,我想要做一个memcached密钥testing,如果存在,则返回密钥的值。 如果没有密钥,它应该通过代理。
我用这个指令来做:
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和/是一样的。 我不想复制粘贴我的代理configuration。 相反,我想redirect位置/到@proxy 。 我如何将一个位置块redirect到另一个位置? 我怎样才能摆脱重复configuration的代理?
最简单的做法是将所有常用代理设置放入服务器,然后在每个位置只需要一个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 } }