묻고답하기
AWS - 사용자 IP 인식이 안됩니다. 전부 127.0.0.1 로 나오는 듯
2015.01.04 22:24
1. 문제 사이트 주소
allcalc.tk
2. 오늘 한 작업 내용
1. 오늘 AWS 프리티켓 등록하고, 2. EC2 - t1.micro 인스턴스 생성하였습니다. XpressEngine on Ubuntu powered by IAANSYS, INC. (1.7.4.1-a)3. 그러고... Elastic IP 할당받아서 연결했구요. 4. dot.tk 도메인 연결했습니다. 이 때 처음 설치시 자동 설정된 인스턴스 주소가 default url로 설정되어서, 잠시동안 시작페이지만 접근할 수 있었습니다. 하는 수 없이 ssh로 콘솔 로그인해서 db.config.php 파일 수정하여 해결하였습니다. 그 밖에 손본 부분은 없습니다. 이후에, 쉬운 설치를 통해서 코어 업데이트 하였구요. 메뉴 설정, 레이아웃 수정, 모듈 설치 등의 과정에서 특이할만한 문제점은 발견하지 못하였습니다.
|
3. 문제의 발생
게시판 글쓰기 후 IP를 보니 127.0.0.1로 나오는 겁니다.
관리자라 그런가 싶어서 일반 아이디로 글쓰기 해서 관리자로 봐도 127.0.0.1입니다.
혹시나 싶어서
IP가입 중복방지 모듈 설치한 다음에 신규 아이디 등록해 봤는데...
역시나 127.0.0.1로 표시되더라구요.
큰 문제는 없으나, IP중복으로 추천 등이 안되는 사소한 문제가 있습니다.
그외에도 IP 기준으로 하는 활동들에 제약이 있을 듯 한데요.
해결방법이 딱히 떠오르지 않네요.
도움이 될만한 글이나 내용 아시면 알려주시면 감사하겠습니다.
댓글 20
-
2-COIN
2015.01.04 22:36
-
시니시즘
2015.01.04 23:47
유료 목적으로 만드신 건가요? AWS는 인스턴스 하나당 시간이 계산되서 여러개 띄워놓으면 1년치 순식간에 사라진다는.
-
2-COIN
2015.01.04 23:50
일단 무료라서 만들어 봤습니다. 프리티어로요.
그래서 인스턴스는 하나만 실행중입니다.
* Route 53도 무료인가 싶어서 잠깐 돌리려고 했는데,
무료 서비스 목록에 없는 거더라구요.
Bill에 보니까 0.01$ 올라갔습니다. ㅋㅋ
-
시니시즘
2015.01.04 23:52
엘라스틱 도메인은 유료인 부분 참고하시구요. 인스턴스를 한번 껐다 키는데 1시간이 무조건 계산됩니다. 여러번 리스타트 하면 10번 하면 10시간 훅 날아가는 점 유의하시구요. 이외에도 모르는데 돈나가는거 엄청 많습니다... 아마 푸쉬 서비스나 웹소켓 문제로 단독 호스팅 쓰시는거 같은데 굉장한 프로젝트 아니면 비추입니다.
-
2-COIN
2015.01.05 00:16
http://aws.amazon.com/ko/ec2/pricing/
Elastic IP는 일단 인스턴스가 유지 & 연결되는 동안은 1개 무료라고 하니까,
잘 관리하면 이에 대한 요금은 나오지 않을 것 같습니다.
순간 눈탱이 맞는 일이 가능하다는 것은 주의하고 있습니다.
일단 뽑아 쓰는데까지는 써보려구요. ^^
-
시니시즘
2015.01.04 23:50
간단한 테스트로 임의로 php 파일 만든 뒤에 접속자 ip 띄우는 php 구문을 확인하는게 님 현상 원인을 잡는 디버깅의 시작이라고 생각됩니다.
-
2-COIN
2015.01.04 23:52
조언 감사드립니다.
검색을 해 봐도 딱히 방법이 안보이니
조언해주신 방향으로 시도를 해 보아야겠습니다.
-
2-COIN
2015.01.05 00:21
문제 재확인을 위해 리퍼러 모듈 설치하여
타 사이트에 글 링크해 두고,
링크타고 들어와 보니...
나머지 항복들은 모~두 잘 나오는데,
접속 IP만 127.0.0.1 로 기록되어 있네요.
-
2-COIN
2015.01.05 01:24
조치사항
ipcheck.php 파일 만들어서 ftp로 올리려고 했는데,
sftp 로 안올라가서(퍼미션이 없는 듯),
ssh 로 들어간 다음에 sudo vim 명령으로 만들었습니다.
<? // ip_check_test echo $REMOTE_ADDR; ?>
<? //아이피 주소를 출력 if($HTTP_X_FORWARDED_FOR != "") { echo $HTTP_X_FORWARDED_FOR; } else { echo $_SERVER['REMOTE_ADDR']; } ?>
<? // ip_check_test3 if (isset($_SERVER['HTTP_X_FORWARDED_FOR']) && $_SERVER['HTTP_X_FORWARDED_FOR'] ) { $clientipaddress = $_SERVER['HTTP_X_FORWARDED_FOR']; } else { $clientipaddress = $_SERVER['REMOTE_ADDR']; } echo $clientipaddress; ?>
Code3 출처 : http://webjawns.com/2013/10/how-to-get-client-ip-behind-aws-elastic-load-balancer/
해당 파일을 브라우저로 접속해 보면 화면에 아무 것도 표시되지 않습니다.
그냥 하얗습니다.
혹시나 싶어서 퍼미션도 644 755 바꿔보고,
소유자도 root에서 다른 파일들(index.php 등) 과 동일한 www-data 로 바꿔 봤는데도
마찬가지 상태입니다.
동일한 코드를 다른 무료 웹호스팅 서버에 올려서 보니
제대로 IP 표시가 되구요.
-
2-COIN
2015.01.05 02:08
<? echo $_SERVER ?>
이걸 일반 웹호스팅 서버에서 읽으면array 라고 나오는데요.AWS에서 읽으면마찬가지로 아무것도 안나옵니다.데이터가 없다기 보다는 다만 접근할 수 없기 때문이 아닐까 싶습니다. -
2-COIN
2015.01.05 10:54
아... 위에서 아무것도 안나왔던 것은...
쪽팔리게도 제 실수 때문이었네요.
<? 내용 ?> <?php 내용 ?>
웹호스팅 하는 곳은 위 처럼 코드 넣어도 되는데,
AWS는 위처럼 ?php 안넣으면 동작을 안하더라구요.
아파치와 nginx의 차이인지 어떤건지,
단순한 실수 때문에 일이 복잡해졌네요. ㅋㅋ
-
2-COIN
2015.01.05 10:59
코드 앞에 <?php 안해서 결과가 안나왔던 거네요.
<?php 로 수정하고 읽어보니
ipchecker.php 결과 : 없음(빈칸)
ipchecker2.php 결과 : 127.0.0.1
ipchecker3.php 결과 : 220.78.xxx.xxx // (빙고!)
3번은 제대로 표시를 하였습니다.
-
2-COIN
2015.01.05 02:23
http://serverfault.com/questions/458633/odd-behavior-of-setting-remote-addr-between-apache-nginx-and-aws-elb
apache / nginx 도 서로 다를 수 있다는 것 같고...
여튼 aws의 elb, 로드밸런싱 등 내부 네트워크가 복잡해서 이런 일이 일어나는 듯 보입니다.
해결 방법은 있긴 하겠죠... 제 능력으로 찾을 수 있느냐가 관건이겠지만
-
AJKJ
2015.01.05 02:37
사용하신게 자동화설치 비슷한것 같은데, 그것 때문에 꼬인거 같습니다.(XE버젼도 옛날꺼는 논외로 하고요..)
https://aws.amazon.com/marketplace/pp/B00JAPNXKA
자동설치 이용하시지 마시고, ubuntu/centos 에다가 직접 설치해보세요.
127.0.0.1이 나오는것은 자동설치에 리버스 프록시가 포함되서 그런것 같네요.
-
AJKJ
2015.01.05 04:19
현상태에서 하시려면 앞단 리버스 프록시에에서 x-forwarded-for 헤더를 설정하셔야 할거에요 -
2-COIN
2015.01.05 09:58
http://engineering.blopboard.com/resolving-real-client-ip-with-amazon-elb-nginx-and-php-fpmhttp://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/TerminologyandKeyConcepts.html#x-forwarded-headers아무래도 이 내용과 관련이 있을 듯 보입니다. -
2-COIN
2015.01.05 10:45
phpinfo() 로 봤더니만...제 remote IP가 잘 보이네요._SERVER["HTTP_X_FORWARDED_FOR"] 220.78.xxx.xxxAWS docs에 설명된 대로 다 변형되어서 전달되고 있었나봅니다.이제 저걸 어떻게 XE 연결해줄 것인가만 남아있네요.XE를 뜯어고치는건 무리가 있을 듯 하고,_SERVER["HTTP_X_FORWARDED_FOR"] 요 값을_SERVER["REMOTE_ADDR"] 에 복사 시키는게 좋을 듯 한데어디서 어떻게 처리해야 가장 좋을지 조언을 부탁드리겠습니다. -
LI-NA
2015.01.05 10:58
간단하게 대충(?) 해결하려면 index.php에다 넣어버리면 됩니다. -_-;;
저도 클라우드플레어에서 XE 돌릴때 그렇게 했었네요.
-
2-COIN
2015.01.05 11:52
오우....
됐습니다.
첨에는
소심하게 index.php 의 말미에다가 넣었는데
$_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_X_FORWARDED_FOR'];
아무리 해도 안되는겁니다.이것저것 바꿔가면서 해도 안돼서 혹시나 해서 앞으로 옮겨봤더니바로 되는군요 ㅋㅋ답변 감사드립니다. -
2-COIN
2015.01.05 12:00
일단 문제 해결 - 상황 종료=======================================================총정리=======================================================1. 문제 원인사용자 -> AWS 클라우드 로드밸런서 등 -> 웹 SERVER웹서버에서는 REMOTE ADDR을 내부로 잡음* free tier에는 로드 밸런서가 없는 듯2. 해결 방법이미 이를 해결하기 위해 AWS에서 X-Forwarded Headers 를 제공함.http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/TerminologyandKeyConcepts.html#x-forwarded-headersXE에서는 이에 대한 대책이 코어에 없기 때문에, 애드온 등을 통해 해결해야 함.하지만 개발된 애드온은 없음?(미확인)임시로 index.php 파일의 초미에 아래의 코드를 추가하여 해결 (말미에 넣으면 안됌)$_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_X_FORWARDED_FOR'];
거의 같은 구성 (코어-모듈-레이아웃-스킨)의
테스트 사이트(닷홈 무료계정 웹 호스팅)에서는
문제없이 IP 잘 표시되고 있습니다.