mod_file_cache - Apache HTTP Server

Apache HTTP Server Version 2.0

Apache > HTTP Server > Documentation > Version 2.0 > 모듈

# 아파치 모듈 mod_file_cache

가능한 언어: en | ko

설명: | 메모리에 정적 파일들을 캐쉬
상태: | Experimental
모듈명: | file_cache_module
소스파일: | mod_file_cache.c

### 요약

이 모듈은 조심해서 사용해야 한다. `mod_file_cache`를 사용하여 사이트를 망치기 쉬우므로 이 문제를 꼼꼼히 읽어라.

거의 변하지 않고 자주 요청되는 파일을 캐쉬에 저장하여 서버 부하를 줄일 수 있다. `mod_file_cache`는 두가지 방식으로 자주 요청되는 정적 파일을 캐쉬에 저장한다. 설정 지시어를 통해 `mod_file_cache`가 파일을 열고(open) `mmap()`할지 파일을 미리 열고 파일 핸들러를 저장할지 결정한다. 두 방식 모두 파일을 서비스하기위한 작업의 일부를 ((특히 파일 입출력) 파일 요청때마다 하는 대신 서버가 시작할때 하여 서버 부하를 감소한다.

주의: 이 방법은 CGI 프로그램이나 특별한 내용핸들러를 통해 서비스하는 파일의 속도를 향상할 수 없다. 이 방법은 보통 아파치 core 내용핸들러가 서비스하는 일반파일에만 적용된다.

이 모듈은 아파치 1.3의 `mod_mmap_static` 모듈의 영향을 많이 받은 확장이다.

### 지시어들

### 주제

- mod_file_cache 사용하기

## mod_file_cache 사용하기

`mod_file_cache`는 주서버 설정에서 `MMapFile`과 `CacheFile` 지시어를 통해 설정한 정적 파일들을 캐쉬에 저장한다.

모든 플래폼이 두 지시어를 모두 지원하는 것은 아니다. 예를 들어, 윈도우즈용 아파치는 현재 `MMapStatic` 지시어를 지원하지 않지만, AIX 같은 다른 플래폼은 둘 모두 지원한다. 지원하지않는 지시어를 사용할 경우 서버 오류 로그에 오류문을 남긴다. 지원하지않는 지시어를 사용해도 서버는 시작하지만 파일을 캐쉬에 저장하지 않는다. 두 지시어를 모두 지원하는 플래폼을 사용한다면 어떤 방식이 더 좋은지 실험해볼 수 있다.

### MMapFile 지시어

`mod_file_cache`의 `MMapFile` 지시어는 설정한 정적인 파일들을 `mmap()` 시스템호출을 사용하여 메모리에 대응한다. 많은 최근 유닉스류 운영체제에 이 시스템호출이 있지만, 없는 운영체제도 있다. 또, `mmap()`할 수 있는 파일 크기와 개수를 시스템이 제한할 수 있으므로 실험해보는 것이 좋다.

서버가 시작할때와 재시작할때만 `mmap()`을 한다. 그래서 파일시스템에서 해당 파일중 하나라도 변경된 경우 서버를 재시작해야 한다 (Stopping and Restarting 문서 참고). 다시 강조하면: 서버를 재시작하지않고 파일을 수정하면 요청 서비스가 완전히 이상할 수 있다. 이전 파일을 지우고(unlink) 새로 파일을 만들어서 파일을 수정해야 한다. `rdist`나 `mv`와 같이 많은 도구가 이런 식으로 동작한다. 매번 추가로 불필요한 `stat()` 검사가 필요하고 입출력 감소의 의도에 반하므로 이 모듈은 파일 변화를 신경쓰지않는다.

### CacheFile 지시어

`mod_file_cache`의 `CacheFile` 지시어는 설정 지시어에 열거한 파일(과 파일들)의 핸들(handle) 혹은 파일 기술자(file descriptor)를 열고(open) 캐쉬에 저장한다. 파일을 요청하면 서버는 캐쉬에서 핸들을 찾아서 소켓 API `sendfile()`에 (윈도우즈에서는 `TransmitFile()`) 넘긴다.

서버가 시작할때와 재시작할때만 이런 파일핸들 캐쉬를 만든다. ... This file handle caching is done once at server start or restart, only. So whenever one of the cached files changes on the filesystem you have to restart the server (see the Stopping and Restarting documentation). To reiterate that point: if the files are modified in place without restarting the server you may end up serving requests that are completely bogus. You should update files by unlinking the old copy and putting a new copy in place. Most tools such as `rdist` and `mv` do this.

### 주의

디렉토리의 모든 파일을 재귀적으로 캐쉬에 저장하는 지시어를 요구하지 마라. 대신 이렇게 해봐라... `Include` 지시어를 참고하고 다음과 같은 명령을 실행하라:

`find /www/htdocs -type f -print \
| sed -e 's/.*/mmapfile &/' > /www/conf/mmap.conf`

## CacheFile 지시어

설명: | Cache a list of file handles at startup time
문법: | `CacheFile file-path [file-path] ...`
사용장소: | 주서버설정
상태: | Experimental
모듈: | mod_file_cache

The `CacheFile` directive opens handles to one or more files (given as whitespace separated arguments) and places these handles into the cache at server startup time. Handles to cached files are automatically closed on a server shutdown. When the files have changed on the filesystem, the server should be restarted to to re-cache them.

Be careful with the file-path arguments: They have to literally match the filesystem path Apache's URL-to-filename translation handlers create. We cannot compare inodes or other stuff to match paths through symbolic links etc. because that again would cost extra `stat()` system calls which is not acceptable. This module may or may not work with filenames rewritten by `mod_alias` or `mod_rewrite`.

### Example

`CacheFile /usr/local/apache/htdocs/index.html`

## MMapFile 지시어

설명: | Map a list of files into memory at startup time
문법: | `MMapFile file-path [file-path] ...`
사용장소: | 주서버설정
상태: | Experimental
모듈: | mod_file_cache

The `MMapFile` directive maps one or more files (given as whitespace separated arguments) into memory at server startup time. They are automatically unmapped on a server shutdown. When the files have changed on the filesystem at least a `HUP` or `USR1` signal should be send to the server to re-`mmap()` them.

Be careful with the file-path arguments: They have to literally match the filesystem path Apache's URL-to-filename translation handlers create. We cannot compare inodes or other stuff to match paths through symbolic links etc. because that again would cost extra `stat()` system calls which is not acceptable. This module may or may not work with filenames rewritten by `mod_alias` or `mod_rewrite`.

### Example

`MMapFile /usr/local/apache/htdocs/index.html`

가능한 언어: en | ko