You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Nginx剔除URL中的无用参数,仅保留指定合法参数

Nginx 剔除URL多余无用参数配置方案

方案一:原生Nginx map方案(无额外模块依赖,推荐)

该方案利用Nginx的map指令提前过滤参数,性能损耗极低,适合绝大多数场景:

  1. 首先在http配置块中定义参数过滤规则:
http {
    # 配置过滤规则,仅保留good参数
    map $args $filtered_args {
        default "";
        # 递归匹配所有good参数,自动拼接多值参数
        ~(^|&)(good=[^&]*) $2&$filtered_args;
    }

    server {
        listen 80;
        server_name example.com;
        root /var/www/example;

        location / {
            # 仅当参数发生变化时才重定向,避免死循环
            if ($args != $filtered_args) {
                # 调试阶段可将permanent改为redirect使用302临时重定向
                rewrite ^ $uri?$filtered_args? permanent;
            }

            # 原有业务配置,例如静态资源、反向代理规则等
            try_files $uri $uri/ =404;
        }
    }
}
  1. 规则调整说明:
  • 如需新增保留参数,例如需要同时保留uid、page参数,只需在map块中新增对应匹配规则即可:
    map $args $filtered_args {
        default "";
        ~(^|&)(good=[^&]*) $2&$filtered_args;
        ~(^|&)(uid=[^&]*) $2&$filtered_args;
        ~(^|&)(page=[^&]*) $2&$filtered_args;
    }
    
  • rewrite规则末尾的?作用是禁止Nginx自动拼接原始$args,确保仅返回过滤后的参数

方案二:Lua扩展方案(适合复杂参数规则场景)

如果服务已经安装了ngx_http_lua_module模块,可使用Lua脚本处理参数,适配更复杂的过滤逻辑,对多值参数的处理更稳定:

location / {
    set_by_lua $filtered_args '
        local args = ngx.req.get_uri_args()
        local res = {}
        for key, val in pairs(args) do
            -- 仅保留good参数
            if key == "good" then
                if type(val) == "table" then
                    -- 处理同名多值参数
                    for _, v in ipairs(val) do
                        table.insert(res, "good=" .. ngx.escape_uri(v))
                    end
                else
                    table.insert(res, "good=" .. ngx.escape_uri(val))
                end
            end
        end
        return table.concat(res, "&")
    ';

    if ($args != $filtered_args) {
        rewrite ^ $uri?$filtered_args? permanent;
    }

    # 原有业务配置
}

验证方法

配置修改后执行nginx -t校验配置无误,执行nginx -s reload重载配置,访问测试地址http://example.com/?good=1&bad1=something&bad2=something&bad2=something&good=2,会自动重定向到http://example.com/?good=1&good=2符合需求。

内容的提问来源于stack exchange,提问作者Weblloyd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 15:24:03