我正在尝试使用以下配置运行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。
答案 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;
}