Nginx config无效参数,即使它在文档中

时间:2019-01-10 19:19:06

标签: nginx nginx-config

我正在尝试使用以下配置运行nginx最新版本,但我得到了nginx: [emerg] invalid parameter "route=bloomberg" in /etc/nginx/nginx.conf:13

docker run --rm -ti -v root_to_local_nginx_directory:/etc/nginx:ro -p 3080:80  --name=mynginx --entrypoint nginx  nginx
    # nginx.conf file inside root_to_local_nginx_directory
    http {
        map $cookie_route $route_from_cookie {
            ~.(?P<version>w+)$ $route;
        }

        split_clients "${remote_addr}" $random_route {
            50%     server bloomberg.com route=bloomberg;
            *       server yahoo.com route=yahoo;
        }

        upstream backend {
            zone backend 64k;
            server bloomberg.com route=bloomberg;
            server yahoo.com route=yahoo;

            sticky route $route_from_cookie $randomroute;
        }

        server {
            # ...
            listen 80;
            location / {
                proxy_set_header Host $host;
                proxy_pass http://backend;
            }
        }
    }

这是为什么?根据文档,这应该是正确的http://nginx.org/en/docs/http/ngx_http_upstream_module.html#upstream

2 个答案:

答案 0 :(得分:4)

route=string上下文中server指令的upstream参数被认为是企业级功能,因此只能通过NGINX Plus中的商业订阅获得,不在OSS NGINX中。 (如果您仔细阅读该文档,将会发现它与其他参数归为一个单独的“作为我们的商业订阅的一部分” 小节。)

此外,您还试图在split_clients上下文中使用一些类似的“服务器”参数,就好像它们是nginx解释的实际指令一样,即使在该上下文中所有内容都是字符串文字也是如此;尚不清楚该部分是否引起任何错误,但是即使不是,也很难在配置中引入这种混乱。

参考文献:

答案 1 :(得分:0)

看到此错误的原因是因为split_clients模块不支持route参数。或者,您可以按照以下方式进行操作:

upstream bloomberg {
    server bloomberg.com route=bloomberg;
}

upstream yahoo {
    server yahoo.com route=yahoo;
}

split_clients "${remote_addr}" $random_route {
    50%     bloomberg;
    *       yahoo;
}