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