Category: Linux

아파치 로그 분석하기

Apache Logo

아파치 웹 서버에는 접속에 대한 로그를 남길 수 있습니다.

로그의 형식은 다양하지만 대략적으로 어느 컴퓨터(IP 주소)에서 어떤 기기, 어떤 프로그램을 이용해서 어떤 웹 페이지를 접속했는지, 각 컨텐츠의 전송량등의 정보가 담깁니다.

이 문서는 아파치 로그 분석하기 에 대한 것입니다.

전송량 통계

로그 파일에 컨텐츠의 전송량이 담기기 때문에 이것들을 전부 더하면 아파치 웹 서버가 내보낸 전송량을 알 수 있겠지요? awk 쉘 스크립트로 간단하게 할 수 있습니다.

여기서 중요한 것이 access_log 파일에 전송량을 표시하는 위치 입니다. 위 명령어 앞줄에 ‘s += $10’ 이 있는데, 공백을 기준으로 10번째 칸이 전송량을 표시한다는 거기 때문에 전송량 표시되는 부분이 12번째 칸이라면 이것을 ‘s += $12’ 로 고쳐줍니다.

좀 더 나가서 특정 아이피에 대한 것만 계산하고 싶다면 다음과 같이 해줍니다.

grep 을 이용해서 필요로하는 컨테츠만을 뽑아서 총 전송량을 계산할 수 있습니다.

로봇에 의한 전송량도 계산할 수 있습니다. 구글 봇이 페이지를 긁어가는데 들어간 전송량은 다음과 같이 계산할 수 있습니다.

HTTP 응답코드별 트래픽 계산은 다음과 같이 할 수 있습니다.

응답코드만을 다르게하면 응답코드별로 트래픽 양을 알수 있습니다.

HTTP 응답코드 세기

HTTP 응답코드는 중요 합니다. 이를 잘 파악하면 웹 사이트에 대한 상태를 알 수도 있습니다.

외부에서 이미지 링크 파악

종종 외부 사이트에서 내 사이트에서 이미지를 링크걸어놓은 것을 볼 수 있습니다. 트래픽을 절약하기 위해서 종종 사용하기도 하는데, 이러한 것을 다음과 같이 파악할 수 있습니다.

http://linux.systemv.pe.kr 부분을 자신의 웹사이트 주소를 입력해 주시면 됩니다.

Apache Options, AllowOverride

Apache Logo Apache 설정 중에 Directory 디렉티브(Directive) 내에서 Options, AllowOverride 등을 사용할 수 있는데 이에 대해서 자세히 알아 보겠습니다.

 

AllowOverride

AllowOverride 는 AccessFileName 에 지정한 파일에서 아파치의 설정을 덮어쓸 수 있도록 해줍니다. 보통 AccessFileName 에는 .htaccess 를 지정해주고 DocumentRoot 에 .htaccess 파일에 아피치 설정에 대한 것을 해두면 아파치는 이 파일을 읽어서 반영해 줍니다.

만일 AccessFileName 을 지정하지 않았고 .htaccess 파일이 필요없을 경우에는 AllowOverride 를 사용할 필요가 없기 때문에 다음과 같이 None 으로 설정해주면 좋습니다.

AllowOverride 를 사용할때에 지정할 수 있는 옵션들이 있는데 다음과 같습니다.

  • FileInfo : 문서의 유형을 제어하는 지시자 사용을 허락함. 문서 유형을 제어하는 지시자에는 AddEncoding, AddLanguage, AddType, DefaultType, ErrorDocument, LanguagePriority 등이다.
  • Indexes : 디렉토리 인덱싱을 제어하는 지시자 사용을 허락함. 사용 가능한 지시자로는 AddDescription, AddIcon, AddIconByEncoding, AddIconByType 등이 있다.
  • AuthConfig : 인증 유형을 사용할 수 있도록 허용함.
  • Limit : 호스트 접근을 제어하는 지시어 사용을 허용함. Allow, Deny, Order 같은 지시어를 사용할 수 있다.
  • Options : 지정한 디렉토리를 제어할수 있도록 지시자 사용을 허용함.

AllowOverride 는 AccessFileName 에 지정된 파일에서 쓰일수 있는 기능들을 정의한다고 생각하면 됩니다.

Options

이것은 <Directory > 디렉티브로 지정한 파일시스템에 대해서 아파치 서버가 어떻게 제어할지를 지정해 줍니다. 아주 중요한 부분으로 보안의 시작점이라고 보시면 됩니다.

  • FollowSymLinks: 파일의 심볼릭 링크를 허용하고 아파치는 이를 이용할 수 있다.
  • SymLinksIfOwnerMatch: 심볼릭 링크를 허용하지만 심볼릭 링크의 소유자가 사용자여야 된다.
  • Indexes : 아파치가 디렉토리에 접근했는데, DirectoryIndex 지시자로 설정한 파일이 없을 경우 디렉토리안의 파일 목록을 보여준다.
  • ExecCGI : 지정한 디렉토리내에서 CGI 실행을 허용한다.
  • MutiViews: 클라이언트의 요청에 따라서 적절한 페이지를 보여준다.
  • None : 모든 설정을 사용할 수 없다.

예제로는 다음과 같이 사용합니다.

 

smartctl을 이용한 하드디스크 진단

컴퓨터에서 디스크의 의미는 매우 중요합니다. 사람의 데이터를 영구적으로 보관해야 할 의무를 가지 때문이지요. 이러한 디스크에 문제가 발생한다면 데이터를 영구적으로 잃을 수도 있고 오늘과 같이 IT 를 기반으로 사회가 움직이는 마당에 그러한 일이 발생한다면 큰 금전적인 손실을 입을 수도 있습니다.

이렇게 중요한 디스크의 문제나 오류를 차단하기 위해서는 주기적으로 점검을 해야할 필요가 있는데, 리눅스 시스템에서는 이러한 유용한 도구를 제공 합니다.

smartctl

smartctl 도구는 S.M.A.R.T. (Self-Monitoring, Analysis, and Reporting Technology) 기능이 탑재된 하드디스크를 점검하는 도구 입니다. 사실상 S.M.A.R.T 의 기능을 이용하는 도구이다보니 이 기능이 없는 하드디스크는 이 도구를 이용할 수가 없습니다. 하지만 걱정할 필요는 없습니다. S.M.A.R.T. 기능은 오래전부터 있었던 것이라 왠만한 하드디스크에는 모두 지원되고 있습니다.

먼전, 간단한 디스크 정보도 볼겸 하드디스크에 S.M.A.R.T. 가 기능이 있고 활성화가 되어 있는지를 다음과 같이 해봅니다.

‘-i’ 옵션을 주고 리눅스에서 하드디스크 장치를 인자로 주면 위와같은 결과를 보여줍니다. 주목해야 할 것은 맨 아래에 있는 ‘SMART support is: Enabled’ 입니다. 또, 자세히 보면 ‘/dev/sda’ 의 하드디스크 정보도 함께 파악할 수 있습니다.

참고로, 위의 결과는 하드디스크마다 다 다릅니다. 다른 하드디스크를 봐보겠습니다.

자세히 보면 이전 결과와 달리 ‘SATA Version is:’ 라고해서 SATA 버전도 나오고 ‘Rotation Rate’ 이라고해서 하드디스크의 회전수인 RPM 도 나옵니다. 추가적으로 WARING 을 통해서 이 하드디스크의 최신 펌웨어 정보가 있으니 업그레이드해보라고까지 나옵니다.

다음으로 좀 더 많은 자세하고 많은 정보를 봐보겠습니다.

‘-a’ 옵션을 주면 위와같이 상세한 정보가 나옵니다. 눈여겨 보실 부분은 중간에 나온 ‘SMART Attributes with Thresholds’ 부분 입니다. 각 항목별로 오른쪽에 수치가 나옵니다. 각각의 항목별은 의미가 다 있는데, 여기서 집중해서 봐야할 항목은 다음과 같습니다.

  • Raw_Read_Error_Rate : 디스크로부터 데이터를 읽을때에 발생한 오류 비율. 외부에 물리적으로 충격이 가해지면 이 수치가 치솟는다고 합니다.
  • Reallocated_Sector_Ct : 섹터에 문제가 발생할 경우에 대체영역으로 섹터를 바꾼 횟수
  • Seek_Error_Rate : 하드디스크에서 데이터를 찾는 동안에 발생한 탐색 오류 비율.
  • Offline_Uncorrectable : Offline 은 전원이 없는 상태를 말하며 하드디스크가 꺼졌을때에 잘못된 섹터 갯수로 매우 심각한 상태를 말한다.
  • UDMA_CRC_Error_Count : 데이터 전송시에 발생한 CRC 체크섬 오류 횟수.

위 부분에 수치들이 높게 나온다면 문제가 있다고 봐야 하며 될수 있으면 하드디스크 구매한 곳에가서, A/S 기간이 남았다면, 교체를 요청해야 합니다.

특히나 서버에서 사용되어지는 하드디스크는 다른 하드디스크들보다 중요성은 말할 필요도 없겠지요. smartctl 을 통해서 미리미리 장애를 대응함으로써 중요한 데이터를 보호할 수 있습니다.

 

Apache mod_ruid2 설치

Apache LogoApache 는 TCP/IP 접속과 접속이 이루어진 후에 컨텐츠를 처리하는 프로세스의 권한이 다릅니다. TCP/IP 접속관련은 Root 권한으로 동작하고 이후 동작은 아파치의 설정에 따른 권한으로 실행 됩니다.

 

아파치의 동작 권한은 다음과 같이 설정 합니다.

위 설정은 아파치의 컨텐츠를 처리하는 프로세스가 nobody:nobody 권한으로 동작하도록 지정한 것입니다.

그런데, 이렇게 하면 버추얼 호스트(VirtualHost) 설정을 할 경우에 보통 각 계정별로 RootDocument 를 설정하는데, 이럴경우 아파치 프로세스는 한가지의 권한으로 동작하고 모든 계정에 접근해야 함으로 각 계정에 액세스 권한을 줘야 합니다. 그래서 주로 다음과 같이 해줘야 합니다.

이러한 아파치 권한과 리눅스 시스템 계정별 권한때문에 공개 CMS 프로그램들(xe, gnuboard, wordpress) 등을 설치할때에 홈디렉토리의 퍼미션을 777 로 하게됩니다. 이럴경우 보안상 큰 문제가 됩니다.

아파치의 컨텐츠 프로세스마다 지정한 시스템 계정의 권한으로 동작하도록 하게 한다면 각 계정별로 퍼미션을 바꿀 필요가 없게 됩니다. 이러한 것을 가능하도록 해주는 모듈이 바로 mod_ruid2 입니다.

이 문서는 Apache mod_ruid2 설치 에 관련된 내용 입니다.

1. 설치 환경

설치 환경은 다음과 같습니다.

  • 배포판: CentOS 7
  • Apache Version: 2.4.10
  • Apache MPM: prefork

2. mod_ruid2 설치.

mod_ruid2 프로젝트 홈페이지에서 다운로드 받고 압축을 해제한 후에 apxs 를 이용해서 다음과 같이 설치 해줍니다.

모듈 파일이 설치되고 httpd.conf 파일에 이 모듈이 자동으로 활성화 됩니다.

3. mod_ruid2 설정

기본적으로 다음과 같이 사용을 하시면 됩니다.

4. 그러나, 아직은..

이 모듈은 프로세스의 소유권 변환을 해줌으로 보안성을 향상시키지만 다음과 같은 모듈과 호환성을 제공하지 않습니다. (함께 쓸수 없다는 이야기…)

  • mod_cache
  • mod_cache_disk
  • mod_cache_socache
  • MPM worker
  • MPM event

Apache 2.4.10 이후로 SSLSessionCache를 위해선 mod_cache_socache 의 의존성을 가지고 있기 때문에 mod_ruid2 를 사용한다면 SSL 제대로 동작하지 않을 가능성이 있습니다. (mod_cache_socache 는 과거의 mod_mem_cache 입니다.)

MPM event 일 경우에 이것이 동작하지 않는다는게 가장 큰 문제로 보입니다.

Apache mod_deflate 설정

Apache LogoApache 2.4 에서 mod_deflate 설정 에 대한 문서 입니다.

Apache 2.2 에비해서 Apache 2.4 에서의 설정이 새롭게 바뀌었습니다.

 

 

1. Requirement

Apache 2.4 에서 mod_deflate 를 사용하기 위해서는 다음과 같은 모듈들도 활성화되어야 합니다.

  • mod_setenvif : 환경변수를 정의한다.
  • mod_headers : HTTP 요청 헤더와 응답 헤더를 조절하고 수정하는 지시어를 제공한다.
  • mod_deflate : 서버의 출력을 네트웍으로 클라이언트에 보내기 전에 압축하는 기능 제공

위 모듈들이 Apache 2.4.10 에 활성화 되어 있어야 합니다.

2. 설정

mod_deflate 의 설정은 Apache 2.2 와 2.4 가 차이가 있습니다. 두 버전에 상관없이 설정할 수 있는 방법도 있는데, 이것은 아파치 문서에 나와 있는 방법이기도 합니다.

그런데, Apache 2.4 의 Fileter 모듈을 적용해서 특정한 컨텐츠타입에만 Deflate 를 적용하면 다음과 같습니다.

deflate 를 사용하는데 따라 클라이언트에게 압축된 컨텐츠라는 걸 알려주기 위해서 헤더값을 다음과 같이 조작해 줍니다.

이것을 종합하면 다음과 같습니다.

Apache 설정

Apache LogoApache 설정이 필요 합니다. 그대로 쓰더라도 아무 문제가 없기는 하지만 아주 조금만 설정을 해주면 보안도 높아지고 성능도 좋아집니다.

이 문서의 내용은 Apache 2.4.10 기준으로 작성 되었습니다.

 

1. Default Character Set

아파치의 기본 문자셋을 지정해 줍니다.

2. Server Signature

서버의 자세한 정보를 숨깁니다. 이는 컴파일 설치를 했다면 conf/extra/httpd-default.conf 파일에 정의되어 있으며 httpd.conf 에서 extra/httpd-default.conf 파일을 Include 해주면 활성화됩니다.

3. 디렉토리 리스팅 비활성화

컴파일 설치를 했다면 httpd.conf 파일에서 extra/httpd-autoindex.html 파일을 활성화 하지 않습니다. 그리고 다음과 같이 디렉토리 리스팅을 비활성화 해줍니다.

4. backup 파일이나 source 파일 접근 금지

 

iptable 의 hashlimit 를 이용한 접속 제한

보통 DDOS 공격과 같은 경우에 초당 몇 십개에서 몇백번건의 접속을 시도 합니다. 이러한 초당 수백건의 접속을 이용해서 iptables 의 hashlimit 를 이용한 접속 제한을 할 수 있습니다.

예를들어 초당 20번 이상 접속을 시도하는 것을 차단하고 싶다면 다음과 같이 지정하면 됩니다.

이 차단은 약 1시간 동안 유지됩니다.

 

[번역] 리눅스 커널 튜닝 – swappiness and overcommit_memory

이 문서는 다음 주소의 내용을 발 번역한 것입니다.

리눅스 커널 튜닝 – swappiness and overcommit_memory

리눅스 커널  튜닝가능한 파라메터 vm.swappiness (/proc/sys/vm/swappiness) 는 어떻게 메모리 페이지들이(memory pages) 적극적으로 디스크에 스왑(swap)되어질 수 있는지를 정의하는데 사용되어질 수 있습니다. 리눅스는 활용할 수 있는 free 메모리양이 충분하더라도 오랫동안 메모리 페이지에 접근하지 않는 것들을 스왑 공간으로 이동시킵니다. 이러한  동작은 “swappiness” 커널 파라메터 값을 /proc/sys/vm/swappiness 에서 변경할 수 있습니다.

높은 swappiness 값은 커널은 매핑된 페이지를 좀 더 해제하라는 의미 입니다. 낮은 swappiness 값은 반대의 의미로 커널은 매핑된 페이지를 덜 해제하도록 하라는 의미 입니다. 바꿔말해서, vm.swappiness 값이 높을 수록 시스템은 좀 더 많이 스왑을 할 것입니다.

vm.swappiness 는 스와핑 활동과 freeing 캐쉬사이의 균형을 바꾸기 위해서 0 에서 100 사이의 값을 가집니다. 100 은 커널이 항상 비활성 페이지를 찾게되고 그것들을 스왑 합니다. 다른 말로, 스왑의 발생은 애플리케이션이 메모리를 얼마나 많이 사용하는지, 어떻게 부족한 캐쉬가 찾기 활동을하고  비활성 아이템을 릴리즈하는가에 의존합니다.

일반적으로 프로세스들은 함수 malloc() 를 호출함으로서 메모리를 할당 합니다. 커널은 충분한 메모리가 활용가능한지 판단하고 할당요청을 허용하거나 거부할지를 결정합니다. 리눅스는 메모리 오버커밋(overcommit memory) 할 수 있는 기능을 지원 합니다. 그것은 물리적 램과 스왑을 합쳐 더 많은 메모리를 할당되어질 수 있도록 허용하는 것 입니다. 이것은 무섭지만, 때때로 애플리케이션이 최악의 케이스 시나리오로 메모리를 할당하는 경우에 필요하지만 절대로 이러한 케이스를 사용해서는 안됩니다. (애플리케이션이 메모리를 많이 잡아먹도록 만들지 말라는 이야기 입니다.)

vm.overcommit_memory 는 3가지 가능한 세팅 값이 있습니다.

  • 0 (heuristic overcommit) : 충분한 메모리가 활용가능하지 체크하고, 만약 그렇다면, 할당을 허용한다. 만약 메모리가 충분하지 않다면, 요청을 거부하거나 애플리케이션에 에러를 리턴한다.
  • 1 (always overcommit) :  커널은 “모든 돈을 걸어라”는 것과 같다. 1로 세팅하는 것은 커널에게 애플리케이션의 메모리에 대한 요청을 항상 성공으로 리턴하라고 명령하는 것이다. 이것은 듣기에따라서 섬뜩하고 무서운 것이다.
  • 2 (strict covercommit) : 메모리에 물리적 메모리와 스왑을 합쳐 초과 할당을 vm.overcommit_ratio 에 정의되어진 것만큼 할당하도록 허용하라. vm.overcommit_ratio 파라메터는 비율로서 얼마나 커널이 오버커밋을 할 수 있는지를 결정할때에 추가할 메모리의 양이다. 예를들어, vm.overcommit_ratio 가 50 이고 1GB 의 램을 가지고 있따면 커널은 요청이 실페하기전에 0.5GB 의 물리메모리와 스왑을 더해서 할당되어질 수 있도록 허용하게 된다. 결국 물리메모리를 낭비하게 된다.

프로세스가 포크(fork)될때나 fork()함수를 호출할때, 이것은 전체 페이지 테이블(page table)이 복제된다. 다른 말로하면, 작식 프로세스는 완벽하게 부모의 메모리공간의 복사본을 가진다는 것이며 이는 당신이 예상한대로 두배의 메모리양을 필요로한다. (부모 메모리, 자식 메모리) 만약 그 자식들의 의도가 즉각적으로 exec()를 호출하는 것이라면( 하나의 프로세스가 다른것으로 교체되는) 부모의 메모리를 복제하는 활동은 시간을 낭비한다. 왜냐하면 이러한 패턴은 아주 일반적인것으로, fork()와 달리 vfork()로 생성은 부모 메모리를 복제하지 않으며 대신에 자식 프로세스가 exec() 를 호출하거나 사라질때까지 그것을 블럭킹한다.  The problem is that the HotSpot JVM developers implemented Java’s fork operation using fork() rather than vfork()

영구적으로 바꾸기.

 

CentOS IPv6 비활성화

IPv4 의 부족분을 대체하기 위해서 IPv6 가 개발되었지만 아직까지 사용빈도가 높지않아 리눅스 IPv6 비활성화 시켜서 자원을 아낄 수 있습니다. 기본적으로 CentOS 6, 7 에서는 IPv6 가 활성화 되어 있습니다.

위와같이 IPv6 가 사용 됩니다.

CentOS 6 

1. IPv6 커널 모듈 비활성화

다음과 같이 IPv6 커널 모듈이 로딩되지 않도록 해줍니다.

2. 커널 파라메터 추가

다음과 같이 IPv6 커널 파라메터를 추가해 줍니다.

이제 재부팅을 해주면 IPv6 가 비활성화 됩니다.

CentOS 7

1. Grub2 IPv6 비활성화 옵션 추가

이와같이 GRUB_CMDLINUX_LINUX=”ipv6.disable=1 …” 를 추가 합니다.

그리고 다음과 같이 Grub 을 재성해 줍니다.

 

위 절정을 다하고 시스템을 reboot 해주면 IPv6 가 비활성화 됩니다.

Apache 2.4 새로운 기능

Apache Logo

이 문서는 Apache 2.4  새로운 기능에 대해 기술한 문서 입니다.

 

 

1. 개요

Apache 2.2 는 2005년 후반기에 발표되고 지금까지 큰 버전의 변화가 없이 사용되고 있습니다. 그러다 최근 고용량의 정적 파일 및 큰 규모의 싸이트가 많아짐에 따라서 대량 접속에도 적은 리소스를 사용하면서 빠르게 서비스 할 수 있는 웹서버가 절실해졌습니다. 이에 러시아에 한 업체가 자사 싸이트 운영을 위해서 웹 서버를 제작했고 이것을 공개했는데 그것이 바로 Nginx 입니다. Nginx 의 빠른 응답속도와 적은 리소스 사용은 그동안 Apache 서버에 답답해했던 많은 사용자들을 붙 잡았으며 현재 Nginx 의 시장점유율은 날이 갈수록 높아지는 추세 입니다.

이에 Apache 재단에서도 빠른 응답속도와 적은 리소스등 기존의 Apache 에 큰 변화를 주어야겠다고 생각했는지 거의 7년이 다 되어가던 2012년 2월달즘에 Apache 2.4를 릴리즈 합니다. Apache 2.4는 기존 Apache 2.2와 비교했을때에 프로세스 모델에 있어서 큰 변화를 준 만큼 웹서버 시장에서, 더군다나 Nginx 와의 경쟁이 더욱 치열해질 것으로 전망 됩니다.

2.새로운 기능

먼저, Apache 2.4의 새로운 기능에 대해서 정리해 보겠습니다.

(Run-time) Loadable MPMs

Multi MPMs는 이제 컴파일 타임에 Loadable 모듈로 빌트 인 될수 있습니다. Multi-Processing Modules (MPMs) 네트워크 포트를 바인등(Binding)하고 클라이언트로부터 요청을 받고 자식 혹은 쓰레드에 핸들링(Handling) 요청을 보냅니다. Apache 2.2까지는 이것을 정적 컴파일(static compile) 해야만 했습니다. 이는 Apache 를 컴파일 설치할때에 결정되어지는 것으로 이를 사용하지 않거나 사용하기 위해서는 컴파일 시에 결정을 해야 했습니다. 하지만 Apache 2.4 에서는 이를 실행 타임(Run-time)에서 결정할 수 있도록 ‘Loadable Module’ 로 기능을 제공합니다. 컴파일 설치시에 하게되는 Configuration 에서 ‘–enable-mpms-shared’ 를 사용하면 됩니다.

Event MPM

Nginx 는 ‘Event Driven’ 방식의 웹 서버로 유명합니다. 하지만 Apache 는 그동안에 ‘Event Driven’ 방식을 지원하지 않았습니다. 대신 한개의 동접 클라이언트당 한개의 쓰레드 (혹은 프로세스) 구조였고 이 때문에 한 클라이언트가 맺은 접속이 완전히 끝나지 않는한 쓰레드 혹은 프로세스가 죽지않는 방법을 사용했습니다. 이는 ‘Keep Alive’ 설정으로 존재합니다. 하지만 이 ‘Keep Alive’ 때문에 대량접속에서는 효율이 급격하게 떨어지는 문제점도 안고 있었습니다.

‘Event MPM’은 이러한 문제를 해결할 수 있습니다. ‘Event MPM’을 사용하기 위해서는 Kqueue 나 Epoll 과 호환되는 시스템이 필요합니다.

Asynchronous support

비동기 읽고/쓰기에 대한 기능을 지원합니다. (따로 설정하거나 하는건 없고 내부 구조적으로 저런걸 지원한다는 모양입니다.)

NameVirtualHost Deprecated

Apache 2.4 에서는 NameVirtualHost 가 앞으로 사용되지 않는 옵션으로 변경되었습니다. 가까운 미래에 이 옵션을 사라질 것입니다.

Config file variables

Apache 2.4 에서는 설정 파일 내에서 변수를 사용할 수 있게 되었습니다. 사용법은 다음과 같습니다.

‘Define’ 을 이용해서 변수를 정의하면 설정 파일내에서 얼마든지 반복해서 사용할 수 있습니다.

Per-module and per-directory LogLevel configuration

모듈에 대한 LogLevel 과 각 디렉토리별 LogLevel 를 지정할 수 있게 되었습니다. 모듈에 대한 LogLevel 지정은 다음과 같습니다.

각 디렉토리별 LogLevel 은 다음과 같습니다.

그리고 debug 위로 새로운 LogLevel 인 trace1 ~ trace8 이 추가되었습니다.

Access Control

Apache 의 접근 제어는 아이피 기반, 호스트 기반, 클라이언트 요청에 대한 특이한 것들에 대해서 ‘Order’, ‘Allow’, ‘Deny’, ‘Satisfy’ 를 이용해서 했었습니다. 하지만 Apache 2.4 로 넘어오면서 인증관련 메커니즘이 조금 바뀌면서 이를 수행하는 모듈, ‘mod_authz_host’가 새롭게 만들어졌습니다. Apache 2.2 와 Apache 2.4를 비교해 예제를 보겠습니다.

모든 요청을 거부

모든 요청을 허용

example.org 는 허용 나머진 모두 거부

여기서 주의할 점은 ‘foo.example.org’ 를 ‘example.org’ 로 적는다고 해서 접근제한을 걸수 없다는 겁니다. ‘end in’ (위 예제의 .net 과 같이) 은 적용이 되지만 도메인의 일부부만을 매칭해서 전체가 적용되도록 할 수는 없습니다.

Require IP 클라이언트의 IP를 체크해서 맞으면 접속을 허용합니다.

변경된 이름들

Apache 2.4 로 넘어오면서 변경된 이름들이 존재합니다. 다음과 같습니다.

  • mod_disk_cache -> mod_cache_disk
  • MaxClients -> MaxRequestWorkers
  • MaxRequestsPerChild -> MaxConnectionsPerChild

기타 변경된 것들

이외에도 변경된 사항들이 있는데 다음과 같습니다.

  • AllowOverride 의 기본값은 None 이다.
  • EnableSendfile 의 기본값은 Off 이다.
  • KeepAlive 는 오직 On 이나 Off 두개의 값만 가질 수 있다. 예전에는 Off나 0 이 아닌값이면 On 이였다.
  • AcceptMutex, LockFile, RewriteLock, SSLMutex, SSLStaplingMutex, WatchdogMutexPath 디렉티브는 단일 Mutex 디렉티브로 교체되었다.
  • mod_reqtimeout: 만약 이 모듈을 사용한다면 기본값이 자동으로 세팅 된다.
  • mod_autoindex: 이전에 무시됬던, .xhtml 파일의 타이틀을 추출하고 설명을 표시할 수 있게됐다.
  • NameVritualHost 디렉티브는 더 이상 어떤 영향도 없으며 대신 경고를 보여줄 것이다. 어떤 주소/포트를 조합해 가상호스트를 표시하는 것은 네임기반 가상 호스트처럼 묵시적으로 다루어진다.
  • mod_deflate: 압축으로 인해서 데이터보다 압축한 것이 더 커지는, 크기 오버헤드가 있다는걸 알게된다면 압축을 건너뛴다.
  • RewriteLog, RewriteLogLevel 디렉티브는 제거되었다. 이 기능은 이제 mod_rewrite 모듈의 LogLevel 디렉티브의 적절한 로깅 레벨을 설정하는 것으로 대체되었다.  보다 자세한 사항은 mode_rewrite_logging 섹션을 참조.