티스토리 뷰

CF를 사용하면서 가장 처음 겪은 이슈는 기존 $_SERVER["REMOTE_ADDR"] 을 사용하면 사용자의 IP가 아니라 CF 리버스프록시  주소가 남는다는 점이였다.

코드를 변경해 X_Forwarded_For 에서 직접 꺼내는 방법도 있었지만, 기존 코드에 굳이 손을 대고 싶지 않아 구글링을 해보았다.





이미 누군가 좋은 솔루션을 제시했다.

잘 동작하며 기존까지 잘 사용했다. 방금 전 까지...

서비스가 국내 사용자 한정 제공이라 그 동안 문제가 생길리가 없었는데, 최근 큰 문제가 생긴다는 것을 알았다.

위 정규식을 보면 알겠지만, IPv4 만 잡을 수 있다는 것이다.


다시 구글링을 통해 IPv6인 경우 어떻게 해야 할지 검색해 보았으나... 딱히 알맞은 아티클을 찾진 못했다.

어차피 정규식인데 직접 입력하면 되겠지 싶어졌다.

일단 IPv6의 규격을 알아야 정규식을 만들테니, 검색 키워드를 바꾸어 다시 검색했다.



IPv6의 주소 표현 방식은 위와 같다고 한다. 쉽게 정리하자면...

    • ":" 를 기준으로 구분된 0~FFFF의 16진수값 8묶음이다.

    • 각 값에서 앞자리 0은 생략할 수도 있다.

    • 0x0000으로 1개 이상 이어지는 부분을 ::를 통해 생략할 수 있다.

위 조건에 맞도록 정규식을 만들면 다음과 같다.

"^([0-9a-f]|:){1,4}(:([0-9a-f]{0,4})*){1,7}"

정규식이 나왔으니, nginx의 설정파일을 열어 추가한다.

if ($http_x_forwarded_for ~ "^(([0-9a-f]|:){1,4}(:([0-9a-f]{0,4})*){1,7}).*") {
    set $realip $1;
}

설정을 적용하기 위해 nginx -s reload 를 실행해주고 아무 오류 출력 없이 적용 되었다면 끝!


개인적으로 적용한 설정은 다음과 같다.



설정이 적용 되고난 이후 남은 로그를 확인해 보았다.



IPv6로 접근한 사용자도 정상적으로 로그에 남는 것을 확인했다!

'Study > Server' 카테고리의 다른 글

Raspberry Pi를 AFP 서버로 사용하기  (0) 2013.07.16
Raspberry pi 를 선물받았다  (0) 2013.01.30
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/03   »
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
글 보관함