티스토리 뷰

Programming/Web

nginx email masking

Albothyl 2023. 11. 25. 11:37

nginx access.log에 email 정보를 masking 하기 위해서 nginx.conf에 map block을 추가하였다.

동작

  • request가 regex에 match되지 않으면 default로 원래 reqeust를 그대로 리턴한다.
  • request가 regex에 match되면 regex capture 기능을 사용하여 email 부분만 하드코드로 masking하고, email 이전, 이후 부분은 그대로 사용한다. (prefix + **@** + suffix)
    • ex: ?<prefix>: regex capture block에 match되는 값을 변수로 사용할 수 있다.
#nginx min version: 1.11.7

#nginx.conf
http {
    # General
    include mime.types;
    default_type application/octet-stream;
    charset utf-8;
    
    ...
    
	------------------------------------------
	
	#ASIS
	log_format timed_combined '$remote_addr - $remote_user [$time_local] '
    	'"$request" $status $body_bytes_sent '
	    '"$http_referer" "$http_user_agent" $request_time '
    	'$upstream_response_time "$upstream_addr" "$xff"';

	#TOBE
	map $request $email_masked {
    	default $request;
	    "~^(?<prefix>.*\/re\?.*subid=)(?<email>[a-zA-Z0-9+-\_.]+@[a-zA-Z0-9-]+\.[a-z]{2,3})(?<suffix>.*$)" "${prefix}**@**${suffix}";
	}

	log_format timed_combined '$remote_addr - $remote_user [$time_local] '
    	'"$email_masked" $status $body_bytes_sent '
	    '"$http_referer" "$http_user_agent" $request_time '
    	'$upstream_response_time "$upstream_addr" "$xff"';
	
    ------------------------------------------
	
    ...
}

 

Regex Test 참고

- https://regex101.com/r/sY2NYu/1

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함