nginx去掉请求参数

使用map指令

http {
	map $uri $cleaned_path {
	        default $uri;
	        "~^/websocket/(.*)" /$1;  # 移除/websocket/前缀
	 }
	
	map $args $filtered_args {
	        default $args;
	
	        "~^((?:[^&]*&)*)(appToken=[^&]*|userToken=[^&]*)(?:&|$)(.*)$" $1$3; //处理appToken和userToken
	    }
	map  $filtered_args  $filtered_args2{
	        default $filtered_args;
	
	        "~^((?:[^&]*&)*)(appToken=[^&]*|userToken=[^&]*)(?:&|$)(.*)$" $1$3;//处理appToken和userToken
	    }
	
	map $filtered_args2 $filtered_args3 {
	        default $filtered_args2;
	        "~(.*)&$" "$1";       # 移除结尾的 &
	    }
	    
    ......其他配置,略
    
	server {
	        location /websocket/ {    
	        ....原配置不要删除,只改下面的porxy_pass
	          proxy_pass http://backup$cleaned_path$is_args$filtered_args3;      
	        ....原配置不要删除
	     }
 }

使用if…set指令–【推荐】

server下的location里面写,更简单高效,因为这两个参数都是不同的值,没有复用的可能

        location /websocket/ {    
            set $path_tmp ${uri};
            set $args_tmp ${args};
	              
            if ( $path_tmp ~* ^/websocket/(.*)$){
                set $path_tmp /$1;   #path部分去掉websocket;
            }
            if ( $args_tmp ~* ^(.*)(&appToken=\w*)(.*)$){
                set $args_tmp $1$3;  #参数去掉appToken;
            }
            if ( $args_tmp ~* ^(.*)(&userToken=\w*)(.*)$){
                set $args_tmp $1$3;  #参数去掉userToken;
            }  
            if ( $args_tmp ~* ^&?(.*)&?$){
                set $args_tmp $1;   #修正剩余参数的格式,去掉头尾多余的&
            }

            proxy_pass http://imsconsumerCluster$path_tmp$is_args$args_tmp;      
            proxy_http_version 1.1;
            proxy_set_header Upgrade websocket;
            proxy_set_header Connection upgrade;
            proxy_read_timeout 86400s;	          
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值