
이 질문은 다음과 유사합니다.Nginx에 기록되지 않도록 특정 쿼리 매개변수를 제외하시겠습니까?그러나 여러 매개변수의 경우. 내가 하고 싶은 일은 난독화하는 것이다.모두요청 URI에 존재하는 쿼리 매개변수입니다. 예를 들어, 다음과 같은 요청이 있다고 가정해 보겠습니다.
GET /index.html?latitude=55.70&longitude=32.2341&otherkey=value HTTP/1.1
그럼 난 둘 다 좋겠어latitude
그리고 longitude
로그에서 난독화됩니다.
GET /index.html?latitude=***&longitude=***&otherkey=value HTTP/1.1
다음과 같이 로그 형식을 정의하려고 하면:
log_format main '$remote_addr - $remote_user [$time_local] $host "$customrequest" '
'$status $body_bytes_sent $request_time "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
map $request $customrequest {
~^(.*)([\?&]latitude=|longitude=)([^&]*)(.*)$ "$1$2***$4";
default $request;
}
그러면 정규식의 마지막 매개변수만 고려되며 결과는 다음과 같습니다.
GET /index.html?latitude=55.70&longitude=***&otherkey=value HTTP/1.1
이는~ 아니다내가 원하는 것.
그래서 질문은 Nginx를 난독화하도록 어떻게 구성할 수 있는가 하는 것입니다.모두내가 정의한 특정 (쿼리/uri) 매개변수는 무엇입니까?
Nginx 1.19.5를 사용하고 있습니다.
답변1
명령문을 계단식으로 배열할 수 있습니다 map
. 매우 효율적이지는 않지만 쉽게 확장할 수 있습니다. 또한 숫자 캡처를 덮어쓰게 되므로 명명된 캡처를 사용해야 합니다.
예를 들어:
map $request $custom1 {
~^(?<prefix1>.*[\?&]latitude=)([^&]*)(?<suffix1>.*)$ "${prefix1}***$suffix1";
default $request;
}
map $custom1 $customrequest {
~^(?<prefix2>.*[\?&]longitude=)([^&]*)(?<suffix2>.*)$ "${prefix2}***$suffix2";
default $custom1;
}