He visto preguntas similares, pero no específicamente esta, no quiero dejar de registrar URL con un parámetro , quiero registrarlas sin él.
URL inicial de ejemplo:
example.com/dir/file.php?important=1&ignore=random&others=yes
Cómo debe registrarse como:
example.com/dir/file.php?important=1&others=yesBásicamente, quiero filtrar el parámetro 'ignorar' y mantener el resto intacto, si está presente.
deberá crear un formato de registro personalizado, que incluya una variable personalizada y que no incluya la variable $request . Por ejemplo:
log_format main '$remote_addr - $remote_user [$time_local] "$custom_request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; Estoy agregando la variable "$custom_request" , que no existe. Así que necesitas crearlo primero. Y puede crearlo en función de $request , usando expresiones regulares para eliminar lo que no desea.
set $custom_request $request; if ($request_uri ~ "([^\?]*)\?(.*)ignore=([^&]*)&?(.*)") { set $original_path $1; set $args_before $2; set $unwanted $3; set $args_after $4; set $args ""; set $custom_request "${original_path}?${args_before}${args_after}"; }Actualización a la respuesta de Carlos: Igual:
log_format main '$remote_addr - $remote_user [$time_local] "$custom_request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; set $custom_request ""; if ($request_uri ~ "([^\?]*)\?(.*)auth=([^&]*)&?(.*)") { set $original_path $1; set $before $2; set $unwanted $3; set $after $4; set $custom_request "${request_method} ${original_path}?${before}auth=*****${after} $server_protocol"; } Tenga en cuenta que las directivas set e if deben colocarse en el bloque del server . Saqué la línea set $args ""; porque borró la variable $args sin ningún motivo y afectó más que los registros.