클라우드플레어와 방문자 IP 주소

류광, 2019/02/04 18:55
GpgStudy에 클라우드플레어를 적용하면서 겪은 문제점과 그 해결책

제가 관리하는 닥북한국GpgStudy는 DDOS 방지 및 HTTPS 적용을 위해 클라우드플레어를 사용하고 있습니다. 닥북 한국에 적용한 것은 몇 달 되었고, GpgStudy는 며칠 전에 적용했습니다.

클라우드플레어를 적용하는 것은 기본적으로 상당히 간단합니다. 저는 신현석 님의 클라우드플레어와 HTTPS 적용을 참고해서 별 수고 없이 HTTPS 적용까지 마쳤습니다.

포럼과 게임 개발 소식에서 로그인이 풀리는 문제

그런데 GpgStudy의 경우에는 좀 더 손 볼 부분이 있었습니다. 우선, GpgStudy 포럼게임 개발 소식의 로그인이 자꾸 풀리는 문제가 있었습니다. 원래 한 번 로그인 하면 적어도 2주는 로그인된 상태로 남아야 하는데, 클라우드플레어를 적용하니 로그인하고 얼마 후에 다시 접속하면 로그아웃된 상태로 변했습니다.

원인과 해결책은 의외로 간단했습니다. 클라우드플레어의 작동 방식을 간단히 이야기하면, 클라이언트(웹 브라우저)가 웹사이트에 어떤 자원(웹페이지 등)을 요청하면 그것을 웹사이트가 있는 웹 서버가 아니라 클라우드플레어의 서버를 먼저 받아서 자신의 캐시에 있는 버전을 보내 주거나 실제 웹서버에게 해당 자원을 요청해서 전달해 줍니다. 어떤 경우이든 웹 서버는 클라우드플레어와 통신하며, 따라서 웹 서버가 인식하는 원격 클라이언트 주소는 항상 클라우드플레어 서버의 주소입니다.

포럼과 게임 개발 소식은 사용자를 식별할 때 여러 요소와 함께 원격 클라이언트 주소를 사용하는데, 구체적으로는 아파치 서버를 통해서 PHP에 전달된 REMOTE_ADDR 서버 환경 변수를 원격 주소로 사용합니다. 이것이 표준적인 방식인데, 클라우드플레어를 사용하는 경우 REMOTE_ADDR은 클라우드플레어의 주소이므로 사용자를 제대로 식별할 수 없었습니다.

다행히 이런 문제를 웹서버 엔진 개발자들도 인식하고 해결책을 마련해 두었습니다. 바로 HTTP_CF_CONNECTING_IP라는 또 다른 환경 변수인데요. 중간에 있는 CF는 아마 CloudFlare겠죠? 어쨌든, 이 환경 변수에는 실제 브라우저의 IP 주소가 들어 있으므로 이것을 사용자 식별의 한 요소로 사용하면 됩니다.

현재 포럼은 phpBB 3.2.x를 사용하는데, 다행히도 이 문제를 위한 CloudFlare IP라는 확장 플러그인이 있어서 간단하게 해결했습니다.

게임 개발 소식의 시스템은 제가 만든 것이라서 안타깝게도 누군가가 확장 플러그인을 만들어 주지는 않았지만, 그냥 한 PHP 파일에서 $_SERVER['REMOTE_ADDR']$_SERVER['HTTP_CF_CONNECTING_IP']로 바꾸는 것만으로 해결이 되었습니다. 게임 개발 소식 시스템은 GpgStudy에서만 사용하고 앞으로도 클라우드플레어를 계속 사용할 생각이라서 그냥 무조건 $_SERVER['HTTP_CF_CONNECTING_IP']를 사용하는 식으로 바꾸었지만, 불특정 다수에게 제공하는 시스템이나 환경이 바뀔 수도 있는 시스템이라면 다음처럼1 동적으로 처리하는 게 바람직하겠죠.

if (isset($_SERVER["HTTP_CF_CONNECTING_IP"])) {
  $_SERVER['REMOTE_ADDR'] = $_SERVER["HTTP_CF_CONNECTING_IP"];

}

Disqus 댓글 시스템과 관련된 문제

그밖에, 게임 개발 소식에서 Disqus 댓글 창과 기존 댓글들이 나타나지 않는 문제도 있었습니다. 크롬의 개발자 도구로 살펴본 결과, Disqus 댓글 창을 불러오는 JavaScript 코드 중 다음과 같은 줄이 문제였습니다.

dsq.src = 'http://' + disqus_shortname + '.disqus.com/embed.js';

클라우드플레어 적용으로 GpgStudy 전체가 HTTPS 사이트로 변했기 때문에 HTTPS 페이지에서 HTTPS가 아닌 JavaScript 파일을 요청하는 상황이 벌어졌고, 그것이 보안 원칙 위반이라서 브라우저가 요청을 거부한 게 문제의 원인이었습니다. 그냥 'http://''https://'로 수정하니 댓글 창이 다시 나타났습니다.

그래도 기존 댓글들이 나타나지 않는 문제는 바로 해결되지 않았는데, 댓글이 있는 페이지들을 Disqus가 다시 긁어가게 하면 된다는 이야기를 웹에서 찾아내고는 적용했습니다. 간단히만 이야기하면, Disqus의 해당 Admin 페이지에서 Community -> Migration Tools의 Redirect Crawler (Advanced)를 실행했는데요. 그게 효과가 있었는지 아니면 그냥 시간이 지나서 저절로 해결되었는지는 모르겠지만, 얼마 후에 게임 개발 소식들의 기존 댓글들(그리고 GpgStudy 메인 페이지의 댓글 개수들)이 정상적으로 나타났습니다.

top
트랙백 0 : 의견 # + 0

2019년 새해 복 많이 받으세요!

류광, 2019/01/09 00:17

제 번역서 독자 여러분과 블로그 방문자 여러분께 새해 인사드립니다. 2019년 새해 복 많이 받으시고 항상 건강하세요!

작년 한 해 보여 주신 관심과 격려에 감사드립니다. 올해도 열심히 번역하고, 블로그 글도 더 많이 쓰겠습니다.

올해 처음 나올 번역서는 예정보다 출판이 많이 늦어진 앤디 필드의 R+통계학 책(Discovering Statistics Using R)입니다. 번역서 제목은 아직 정해지지 않았고요. 아마도 2월 중으로 나오지 않을까 예상합니다.

지금은 어거왈의 Neural Networks and Deep Learnig: A Textbook을 번역하고 있고요. 그 후의 책들은 아직 계약이 마무리되지 않아서 공개할 수 없는데, 확정되면 근황 글을 통해서 알려 드리겠습니다.

작년 새해 인사 글에서 클라우드플레어를 이용해서 HTTPS를 한 번 적용해 보겠다고 했었는데 결국 실행은 하지 못했네요. 대신 닥북 한국 홈페이지에 클라우드플레어로 HTTPS를 적용하긴 했습니다. 그 경험을 살려서 이 곳과 GpgStudy에도 HTTPS를 적용해 보렵니다.

오랜만에 남는 스팀 키 뿌립니다. ?는 올해 연도의 일의 자리 숫자입니다.

(다른 분들이 시간 낭비 하지 않도록, 등록 성공하신 분들은 간단히 댓글 남겨 주시면 고맙겠습니다.)

다시 한 번 새해 복 많이 받으세요!

top
TAG 블로그
트랙백 0 : 의견 # + 0

근황 - 2018-12-15

류광, 2018/12/15 18:46
차루 어거왈의 Neural Networks and Deep Learning: A Textbook 번역 중.

요즘은 차루 어거왈(Charu Aggarwal)의 Neural Networks and Deep Learnig: A Textbook을 번역하고 있습니다. 내년 2월 중순에 탈고 예정입니다. 굿펠로 등의 심층 학습 책과 같은 주제를 다루는 책인데 그 책과는 느낌이 꽤 다릅니다. 아직 다 번역하지는 않았지만, 논의의 집중도라던가 주제들을 제시하는 순서 등의 측면에서 상당히 마음에 듭니다.

앤디 필드의 R+통계학 책은 출판이 계속 늦어지고 있는데요. 현재 앞, 뒤 부속(서문, 부록, 용어집 등등) 조판이 끝나길 기다리고 있는 상태입니다. 조판이 끝나고 그 부분의 역자 교정과 찾아보기 정리에 4~5일 정도 걸릴 것으로 예상합니다. 그 후에도 출판까지는 제가 잘 모르는 여러 과정이 있고요. 느긋하게 기다리는 수밖에 없겠습니다. 아마 새 학기가 시작하기 전에는 나올 것입니다.

여가에는 범용 문서 변환 도구인 Pandoc을 살펴보고 있습니다. 닥북이나 제 번역 일에 도움이 될 만한 게 있어 보입니다. 가능하면 이 블로그에서 Pandoc(팬닥? 판독?)에 관한 글도 한 번 써볼 생각입니다...

top
트랙백 0 : 의견 # + 0

'심층 학습' 독자 증정 이벤트 당첨자 발표! (당첨자 분들 메일 확인하세요!)

류광, 2018/11/08 14:15
심층 학습 독자 증정 이벤트 당첨자 발표 및 문제 해설

본문 열기

top
트랙백 0 : 의견 # + 0

'심층 학습' 독자 증정 이벤트

류광, 2018/11/06 13:32

Deep Learning의 번역서 '심층 학습' 출간 기념으로 독자 증정 이벤트를 진행합니다.

간단한 문제 세 개를 풀어서 답을 보내 주시면 정답자 중 세 분을 추첨해서(https://www.random.org/integers/ 이용) 번역서를 한 권씩 보내 드리겠습니다.

문제 나갑니다:

문제 1. 이 책의 주 저자 굿펠로와 가장 관련이 없는 것은?

(a) 브라운 신부(BBC) (b) GAN (c) OpenAI

문제 2. 이 책의 주제인 심층 학습과 가장 관련이 없는 것은?

(a) 지도 학습 (b) 강화 학습 (c) 야간 자율학습

문제 3. Deep Learning(심층 학습)과 가장 관련이 있는 것은?

(a) 42 (b) 러닝머신 (c) 딥치즈


문제들(특히 문제 3)이 조금 억지스러울 수 있지만, "그나마 셋 중에서는 가장 관련이 없는/있는"이라고 해석해 주세요. 관련이 더 있는/없는 둘을 제거하면 나머지 하나가 답입니다.

세 문제의 답을 연락 가능한 이메일 주소와 함께 비공개 방명록에 2018년 11월 8일(목) 오후 두 시까지 올려 주시면 당첨자를 추첨해서 이 글이 아닌 새 글로 발표하겠습니다.

예:

답: 1-a, 2-b, 3-c

연락처: abcdef@example.com

주의 1: 이메일 주소를 반드시 글 내용에 포함해 주세요. 언제부터인지 모르겠지만, Disqus(비공개 방명록이 사용하는 댓글 시스템)의 관리자 페이지에 글 작성자의 이메일 주소가 abc****@def.com 형태로 가려져서 나타납니다. 즉, 글 자체에 이메일 주소를 적지 않으면 제가 연락할 수 없습니다. 글에 포함된 이메일 주소와 DISQUS 글 올릴 때 사용한 이메일 주소가 반드시 같을 필요는 없습니다.

주의 2: 당첨되신 분들께는 목요일 오후 3시 이후에 택배 수령 주소를 묻는 메일이 따로 갈 것입니다. 모든 분의 주소가 오면 세 권을 동시에 발송할 예정이라서, 한 분이라도 답장이 늦으면 다른 분들이 기다리게 됩니다. 그래서 발표 다음 날인 9일(금) 오후 2시까지 답장이 없으면 당첨을 취소하겠습니다. 당첨된 분들은 반드시 편지함을(특히 스팸함도) 확인해 보세요.


항상 그렇듯이 뭔가 허술한 점이 있어도 그냥 이벤트의 일부라고 너그럽게 양해해 주시고, 많이들 참여해 주세요!

top
트랙백 0 : 의견 # + 0

◀ PREV : [1] : [2] : [3] : [4] : [5] : ... [65] : NEXT ▶