우선,  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 이용해서 작업하신 분 공유 부탁드립니다. ^^