如何配置nginx位置以共享常用配置选项?


37

如何为一组位置配置共享配置块?

    location / {

            proxy_pass        http://127.0.0.1:9000/;
            proxy_redirect    off;
            proxy_set_header  Host             $http_host;
            proxy_set_header  X-Real-IP        $remote_addr;
            proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;

            proxy_cache cache-test;
            proxy_cache_valid 200 302 24h;
            proxy_cache_valid 404 60s;
            add_header X-Cache-Status $upstream_cache_status;

    }


    location /api/0.1/user{
            proxy_cache_key /user/$http_authorization;
    }

现在,如果我尝试访问/api/0.1/user,那么我会得到404,因为它没有将请求传递给127.0.0.1:9000

Answers:


53

创建一个公共代理配置,并根据需要添加。

/etc/nginx/api_proxy.conf

proxy_pass        http://127.0.0.1:9000/;
proxy_redirect    off;
proxy_set_header  Host             $http_host;
proxy_set_header  X-Real-IP        $remote_addr;
proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;

proxy_cache cache-test;
proxy_cache_valid 200 302 24h;
proxy_cache_valid 404 60s;
add_header X-Cache-Status $upstream_cache_status;

您的主机配置文件

...
location /api/0.1/user {
    include /etc/nginx/api_proxy.conf;
    proxy_cache_key /user/$http_authorization;
}
...

1
+1,但仅需注意一点:事实证明,您可以通过这种方式包括整个配置,包括整个位置nginx.org/en/docs/ngx_core_module.html#include
等效


11

服务器上下文中也允许使用大多数proxy_ *配置变量,因此您可以将它们上移以在多个位置共享相同的设置。

但是,proxy_pass应该仅在位置内使用。因此,您应该在每个位置中至少有此指令,可以选择覆盖某些额外的proxy_ * vars的值。


如果您具有特定于位置的proxy_set_header指令,则此方法将不起作用,因为“并且仅当当前级别上未定义proxy_set_header指令时,这些指令才从上一级继承。” nginx.org/en/docs/http/…–
Emerson Farrugia
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.