apache config 파일 위치
apache2 -V
위 명령어해서 에러나면
$ source /etc/apache2/envvars
$ /usr/sbin/apache2 -V
이렇게 명령어 입력하면 apache 설정 값들이 나타난다.
/etc/apache2/apache2.conf
416 Requested Range Not Satisfiable 에러를 해결하기 위해
httpd.conf에 입력해줘야 하는데
이 파일위치는 기존에는
/etc/apache2/httpd.conf 있었는데
지금은 파일이 생성되어 있지 않다
하지만, 만들고 사용하면 설정값이 적용되어진다.
아파치의 주요 설정 파일인 httpd.conf 파일은 다음과 같이 3가지 섹션으로 구성되어 있다.
Section 1: Global Environment
기본 설정
ServerRoot "/usr/local/apache"
: Apache의 최상위 디렉토리를 지정하며 절대경로로 지정한다. 이 디렉터리를 기준으로 다른 위치는 상대경로로 지정이 된다.
ScoreBoardFile /usr/local/apache/logs/httpd.scoreboard
: Apache의 런타임 상태가 ScoreBoardFile이 지정되어 있지 않으면 공유메모리(Shared Memory) 세스먼트에 저장된다.
PidFile /usr/local/apache/logs/httpd.pid
: 기동 시에 프로세스 ID가 해당 파일에 저장된다.
타임아웃과 Keep-Alive
TimeOut 300
: 클라이언트가 서버에 요청을 한뒤 클라이언트에서 아무런 응답이 없어서 오류로 처리하기까지의 대기 시간
KeepAlive On
: HTTP 프로토콜은 호출 후에 바로 연결을 종료하는 비연결모드(Connection-less)이다. KeepAlive를 On으로 설정하면 일정시간(KeepAliveTimeout) 또는 일정횟수(MaxKeepAliveRequests) 동안 해당 세션을 유지하여, 동일한 클라이언트로 부터 재호출이 들어오면 해당 소켓을 재사용한다. 이는 보통 20~30% 정도의 성능 향상을 가져오지만, 소켓을 일정시간 유지하기 때문에 자원은 더 사용된다.
KeepAliveTimeout 15
: KeepAlive 모드에서 해당 소켓을 유지하기 위하여 동일한 클라이언트로부터 다음 요청까지 시간. 15초 동안 호출이 없으면 해당 소켓을 종료한다.
MaxKeepAliveReques 100
: KeepAlive 모드에서 해당 연결을 통해 클라이언트로부터 최대로 요청받을 수 있는 횟수이다. 해당 연결을 통해 100번의 요청을 받았다면, 해당 소켓을 종료한다.
prefork 방식 설정
Apache는 컴파일 시에 prefork(프로세스 방식)과 worker(스레드방식, MPM) 방식을 지정할 수 있다. 최근에는 성능과 자원사용율 측면에서 강점이 있는 worker 방식을 주로 사용한다.
<IfModule prefork.c>
StrtServers 8
: 기동 시에 미리 fork하여 생성한 자식 프로세스 수
ServerLimit 256
: 접속 사용자수가 많아질 때, 최대 생성할 수 있는 자식 프로세스 수
MinSpareServers 5
: 프로세스 생성 오버헤드를 줄이기 위해 여분으로 생성하여 대기하는 최소 프로세스 수
MaxSpareServers 20
: 프로세스 생성 오버헤드를 줄이기 위해 여분으로 생성하여 대기하는 최대 프로세스 수
MaxRequestsPerChild 1024
: 자식 프로세스(httpd) 당 최대 처리하는 요청 수. 해당 요청 수를 처리한 후 자동으로 프로세스는 종료된다. 이 값이 0일 때에는 요청 수에 제한이 없다.
</IfModule>
worker(MPM) 방식 설정
최근에는 worker(MPM) 방식을 주로 사용한다.
<IfModule worker.c>
StartServers 4
: 시작시에 초기화되는 서버 프로세스 갯수
ServerLimit 256
: 접속 사용자수가 많아질 때, 최대 생성할 수 있는 자식 프로세스 수
MaxClients 300
: 동시 연결 가능한 클라이언트의 최대 개수
MinSpareThreads 25
: 프로세스당 스레드 생성 오버헤드를 줄이기 위해 여분으로 생성하여 대기하는 최소 스레드 수
MaxSpareThreads 75
: 프로세스당 스레드 생성 오버헤드를 줄이기 위해 여분으로 생성하여 대기하는 최대 스레드 수
ThreadsPerChild 25
: 프로세스당 스레드 수
MaxRequestsPerChild 1024
: 자식 프로세스(httpd) 당 최대 처리하는 요청 수. 해당 요청 수를 처리한 후 자동으로 프로세스는 종료된다. 이 값이 0일 때에는 요청 수에 제한이 없다.
</IfModule>
Section 2: 'Main' server configuration
포트, 계정/그룹
Port 80
: Listen 포트 번호. 포트번호 1024 이하는 root 권한에서 기동해야 한다.
User nobody
Group nobody
: 자식 프로세스가 기동될 Owner, Group. 보안때문에 별도 Shell이 설정되지 않은 nobody 계정으로 설정한다.
ServerAdmin
: 관리자 메일 주소. 예를들어, Apache의 기본 오류 페이지가 디스플레이될 때, 관리자 이메일 주소로 사용된다.
ServerName www.example.com:80
: 서버 도메인명 또는 호스트명
디렉터리 및 관련 옵션 설정
DocumentRoot "/usr/local/apache/htdocs"
: http 요청 시에 HTML, javascript 파일 기본 디렉터리
<Directory /usr/local/apache/htdocs>
AllowOverride FileInfo AuthConfig Limit
Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
</Directory>
: 해당 디렉터리에 대한 다양한 옵션을 설정한다.
<IfModule mod_dir.c>
DirectoryIndex index.html index.htm
</IfModule>
: 디렉터리로 요청이 왔을때, 가장 먼저 찾아서 리턴할 파일이름을 순서대로 설정한다.
에러 로그 및 접근로그 설정
ErrorLog /log/apache/errorlog/error_log
: Apache 에러 로그를 남기는 위치 및 파일을 설정한다.
LogLevel warn
: log를 남기는 기준 레벨을 설정한다. 설정 레벨은 debug, notice, warn, error, crit, alert, emerg 등이 있다. debug가 가장 상세하게 log를 남긴다. 기본값은 warn이다.
CustomLog /log/apache/accesslog/access_log common
: 접근로그를 남기는 위치 및 파일을 설정한다.
Section 3: Virtual Hosts
NameVirtualHost 192.10.12.xxx
: 192.10.12. 대의 IP에서 가상호스트 요청을 기다린다.
<VirtualHost 192.10.12.xxx>
: 192.10.12. 대의 IP에서 가상호스트 요청을 기다린다.
ServerName www.example.com
: www.example.com 도메인/서버명 요청을 기다린다.
ServerAlias www.example.org
: www.example.org 도메인/서버명 요청도 처리한다.
</VirtualHost>
참고로, 가상호스트는 다양하게 설정 가능하다.