시스템관리자의 쉼터 커피닉스 커피향이 나는 *NIX
커피닉스
시스템/네트웍/보안을 다루는 곳
 FAQFAQ   검색검색   멤버리스트멤버리스트   사용자 그룹사용자 그룹   사용자 등록하기사용자 등록하기 
 개인 정보개인 정보   비공개 메시지를 확인하려면 로그인하십시오비공개 메시지를 확인하려면 로그인하십시오   로그인로그인 

가입없이 누구나 글을 쓸 수 있습니다. 공지사항에 대한 댓글까지도..




BBS >> 설치, 운영 Q&A | 네트웍, 보안 Q&A | 일반 Q&A || 정보마당 | AWS || 자유게시판 | 구인구직 || 공지사항 | 의견제시
apache와 nginx로 동적, 정적 데이터 분리해서 서비스

 
글 쓰기   답변 달기    커피닉스, 시스템 엔지니어의 쉼터 게시판 인덱스 -> *NIX / IT 정보
이전 주제 보기 :: 다음 주제 보기  
글쓴이 메시지
truefeel
카페 관리자


가입: 2003년 7월 24일
올린 글: 1277
위치: 대한민국

올리기올려짐: 2010.5.26 수, 12:58 pm    주제: apache와 nginx로 동적, 정적 데이터 분리해서 서비스 인용과 함께 답변

서버 초기 운영시에 정적(이미지 파일 등)과 동적(php 등 웹프로그램) 데이터를 '다른 도메인(예. www .a.com, img.a.com)'과 다른 서버'로 운영하면 좋지만, 그러지 못한 경우가 있다. 이 때, 같은 도메인(www .a.com)이지만 확장자에 따라 정적/동적 데이터를 다른 웹서버에서 처리할 수 있다.

정적, 동적 데이터 1) 분리구성형태와 2) 설정에 대해 간단히 정리한다.

1. 정적 데이터는 nginx, 동적 컨텐츠는 apache로 구성하게 된다.

인용:

유저 -> nginx 웹서버에 접속(정적은 nginx로 처리, 동적 데이터는 apache로 넘김) -> apache 웹서버


2. 앞단에 있는 nginx에서는 ①proxy설정과 ②정적데이터로 처리할 확장자 설정이 필요하다.



Using Nginx As Reverse-Proxy Server On High-Loaded Sites
http://kovyrin.net/2006/05/18/nginx-as-reverse-proxy/

간단한 설정 예)

코드:

location / {
proxy_pass        http://apache서버명:8000;

proxy_set_header   Host             $host;
proxy_set_header   Client-IP        $remote_addr;
proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
... 생략 ...
}

location ~* ^.+.(jpg|jpeg|gif|png|ico)$ {
... 생략 ...
}


3. apache에서는 mod_rpaf모듈로 클라이언트의 real IP정보를 얻어오도록 설정한다.



① 앞단의 nginx는 proxy설정으로 특정 헤더(Client-IP)에 client IP를 뒷단의 apache에 넘겨주고
② 뒷단의 apache는 mod_rpaf모듈로 특정 헤더의 IP정보를 로그로 남기는 형태.

apache에서 로그에는 클라이언트의 real IP가 로그에 남지 않고, nginx서버의 IP가 남게 된다.
access log는 LogFormat 설정(LogFormat "%h ..." 대신 LogFormat "%{Client-IP}i ...")으로 특정 헤더의 값(Client-IP)에서 real IP정보를 얻어 저장할 수는 있지만, error로그는 로그설정 바꾸는게 되지 않는다. 또한 프로그램들도 real IP를 가져오려면 수정도 해야한다.

하지만 mod_rpaf모듈이 로그에 real IP를 저장해야하는 어려움을 쉽게 해결해준다.

4. mod_rpaf모듈 사용 때, 아파치 directory access control

아파치에서 directory access control을 이용할 경우 allow와 deny가 제대로 안된다는 분들도 있다.
<b>저는 이런문제가 발생한 적이 없지만, 문제가 있다고 하시는 분들도 있으니 해결방안을 제시해본다.</b>

코드:

<directory "/...생략...">
  Order deny,allow
  Deny  from all
  Allow from 111.222.123.1
</directory>


만약 제대로 allow/deny가 되지 않는다면, 다음과 같은 방법으로 해결해볼 수 있겠다.

코드:

SetEnvIf Client-IP ^111\.222\.123\.1 allow_ip   <-- 'Client-IP'는 real IP가 있는 헤더 정보. 본인의 환경에 헤더명을 변경할 것
Order deny,allow
Deny  from all
Allow from env=allow_ip


5. 관련글

* '아파치 웹서버를 정적(JPG,PNG,PDF), 동적(PHP) 컨텐츠 서버로 분리하기' (글 jjun님)

인용:

만약 100% 정적인 파일이라면 각각의 httpd 프로세스는 2-3MB의 램을 사용하고
99%의 정적 파일과 1%의 동적 파일을 서비스 한다면, 3-20MB의 램을 사용하게 된다.


* '아파치 웹서버를 정적(JPG,PNG,PDF), 동적(PHP) 컨텐츠 서버로 분리하기' (글 jjun님)

* 'apache에서 proxy IP를 real IP로 바꿔 저장하기' (글 좋은진호)



※ nginx에는 apache mod_rpaf모듈 처럼 특정 헤더에서 IP정보를 얻어 처리해주는 모듈 없음.
※ 5.18(화)에 커피닉스분들과 나눈 이야기를 정리한 것임
위로
사용자 정보 보기 비밀 메시지 보내기 글 올린이의 웹사이트 방문
이전 글 표시:   
글 쓰기   답변 달기    커피닉스, 시스템 엔지니어의 쉼터 게시판 인덱스 -> *NIX / IT 정보 시간대: GMT + 9 시간(한국)
페이지 11

 
건너뛰기:  
새로운 주제를 올릴 수 있습니다
답글을 올릴 수 있습니다
주제를 수정할 수 없습니다
올린 글을 삭제할 수 없습니다
투표를 할 수 없습니다


Powered by phpBB © 2001, 2005 phpBB Group