Недопустимый параметр конфигурации Nginx, хотя он есть в документации - PullRequest
0 голосов
/ 10 января 2019

Я пытаюсь запустить последнюю версию 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 голосов
/ 21 января 2019

Параметр route=string директивы server в контексте upstream считается функцией корпоративного уровня и, таким образом, доступен только по коммерческой подписке в NGINX Plus, а не в OSS NGINX. (Если вы посмотрите ближе к документации, вы заметите, что она сгруппирована вместе с другими параметрами в отдельном «доступном как часть нашей коммерческой подписки» подразделе .)

Кроме того, вы также пытаетесь использовать некоторые аналогичные «серверные» параметры в контексте split_clients, как если бы они были действительными директивами, интерпретируемыми nginx, даже если в этом контексте все должно быть строковыми литералами; неясно, несет ли эта часть ответственность за какие-либо ошибки, но даже если это не так, вводить такую ​​путаницу в вашу конфигурацию - плохой стиль.

Ссылки:

0 голосов
/ 11 января 2019

Причина, по которой вы видите ошибку, заключается в том, что модуль split_clients не поддерживает параметр маршрута. Кроме того, вы можете сделать что-то вроде:

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

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

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