Nginx

nginx 응답속도 제어 & access log

·2014년 3월 3일·조회 19,720

우선,  Access Log

  Apache는 기본적으로 %d, %h, %s와 같은 미리 정의된 기호를 통해서 Log Format을 정의하는데 반해,

 Nginx에서는 $bytes_sent, $status와 같이 사람이 이해할 수 있는 단어로 Log Format을 나타내고 있습니다.

 Nginx도 Apache와 마찬가지로 미리 Log Format을 정의하고 해당 포맷을 Server 별 Access log에 가져다 쓸 수 있습니다.

 기본적인 로그 포맷 예 :

http {
    include       mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
 }

 

이 외에도 아래와 같은 format 값을 사용할 수 있습니다.

 $msec : 로그 시간을 micro sec.로 보여줌

 $request_time : 해당 요청을 처리하는 데 걸린 응답시간. 0.5.19 버전 이후부터는 sec 단위

 $connection : nginx에 붙은 connection 갯수.

응답시간 지연이 발생할 때 request_time과 connection 을 통해서 어느 정도 해당 웹서버의 상태 파악이 가능할 것 같습니다.

 

 

응답속도 제어, limit_rate

   nginx에서 제공하는 옵션 중 응답속도를 제어하기 위한 옵션입니다. 서버에 연결된 대역폭은 한정되어 있고, 사이즈가 큰 파일 요청이 몰릴 경우, 손쉽게 컨트롤 할 수 있을 것 같습니다. 사용 방법은 아래와 같습니다.

limit_rate : 해당 속도로 응답

limit_rate_after : 이 size만큼 응답한 이후에 limit_rate 속도로 응답함

 

location ^~ /mp4/ {
...
limit_rate_after 1m;
limit_rate 150k;
...
}

실제 86KB의 이미지 파일을 20k와 40k의 limit_rate 값을 주고 내려받게 하였을 때의 Access log는 아래와 같았습니다.

127.0.0.1 - - [03/Mar/2014:05:53:53 -0800] "GET /Aragorn.jpg HTTP/1.1" 200 87655 "-" 13 43.557
127.0.0.1 - - [03/Mar/2014:05:55:02 -0800] "GET /Aragorn.jpg HTTP/1.1" 200 87655 "-" 14 20.940

 Access log 포맷 : $remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" '$connection $request_time'

 

원래는 root user가 아닌 계정으로 1024 아래 port를 이용하는 방법을 포스팅하려고 했는데 제대로 동작이 안되네요.

RHEL 5.10과 CentOS 5.4에서 setcap 이용해서 작업하신 분 공유 부탁드립니다. ^^

댓글 4

로그인 후 댓글을 남길 수 있습니다.

  • 강철지그강철지그· 2014년 3월 4일
    응답속도 부분은 흥미롭네요. 저도 한번 테스트 해보겠습니다. 그리고 setcap 은 무엇인지요?
  • 몽상가몽상가· 2014년 3월 5일
    응답속도 제어는 큰파일 다운로드 서비스 경우에 응용해보면 도움이 되겠네요~
  • 맑· 2014년 3월 5일
    jeeg/ linux는 super user가 갖는 permission을 실행 파일들에 나눠줄 수 있더라구요. 1024 아래 port는 super user만 갖도록 되어 있지만, 해당 capability를 nginx 실행 파일에 주면 해당 포트를 이용할 수 있다고 되어 있는데 아직 성공은 못했습니다. 좀 더 찾아보고 공유드릴께요. :D 몽상가/ 동영상 스트리밍 시에 많이 사용하는 것 같습니다. limit_rate_after 옵션도 같이 사용하면 먼저 다운받은 용량만큼 보고 있는 동안 나머지 동영상은 좀 더 천천히 다운받도록 해서 N/W 사용량을 줄일 수 있을 거 같아요. :)
  • 빅토르최빅토르최· 2014년 3월 5일
    camori/ 1024 이하 포트 프로세스 기동 시는 오로지 sudo 로만 가능할 줄 알았는데 새롭게 알게 되었습니다.