防止 NGINX 重新排序查询参数

防止 NGINX 重新排序查询参数

我遇到了一个奇怪的问题。Nginx 正在按字母顺序重新排序查询参数,而不是按请求的顺序。

例如,如果我提供一个 URL:

https://example.com/?a[]=c&a[]=a&a[]=b

我希望$query_string是:

a[]=c&a[]=a&a[]=b

但我得到了

a[]=a&a[]=b&a[]=c

我们使用 Nginx 作为代理,将所有类型的 URL/子域路由到不同类型的应用程序。通常,这在大多数现代应用程序上不会成为问题,但我们使用了一些旧版应用程序(我们无法更改其代码),当查询的顺序不符合预期时,这些应用程序就会中断。

当前代理的 .conf 非常简单:

# Get the application private IP from the name #
map_hash_bucket_size 128;
map $host $task_url {
    include /etc/nginx/service-mappings.conf;
}


server {
    listen 80;
    server_name *.example.com;

    if ($task_url = false) {
        return 404 "Service was not mapped.";
    }

    location ~ /(.*) {
        add_header X-QueryParams $1$is_args$args; # Is not outputting correct value
        add_header X-TaskUrl $task_url;
        proxy_pass http://$task_url/$1$is_args$args;
        proxy_set_header Host $host;
        proxy_pass_request_headers on;
    }

    error_log /var/log/nginx/service-mapper.log;
}

答案1

这不是 Nginx 的问题。

我们已经Query String Sort在CloudFlare中启用了。

我们设置了一个页面规则来仅针对这些域禁用此功能,并且它起作用了。

相关内容