목차
- 웹서버
- 아파치 설정
웹서버 (Web Server)
웹서버란 클라이언트의 HTTP 요청을 받아 웹 페이지 내용을 클라이언트에게 응답 (제공)하는 서버 프로그램입니다.
클라이언트는 사용자, 브라우저입니다. 이때 클라이언트가 서버와 네트워크를 통해 연결하는데, 연결하는 전용 프로토콜이 HTTP 프로토콜입니다.
2022.09.14 - [Programming/WAS] - HTTP 프로토콜 초간단 요약
많이 사용하는 웹 서버 프로그램으로는 Apache, IIS Nginx 가 있습니다. (아래 시장 점유율 사진참고)
APM (Apache HTTP server, PHP script program, MySQL RDBMS)
APM이라고 보통 아파치 웹서버, PHP 스크립트 처리기, MySQL 데이터베이스가 결합되어 있는 시스템을 말합니다. 각 요소가 모두 오픈 소스이므로 비용을 절약하기 위한 웹사이트 구축에 많이 쓰이는 스택입니다. (PHP대신 JSP 프로그래밍이 들어가기도 합니다)
아파치 설정 (httpd.conf)
## CentOS
/etc/htpd/conf/httpd.conf
## Ubuntu
/etc/apache2/apache2.conf
Apache 기본 설정 파일은 OS에 따라 위와 같이 다릅니다. 설정파일 내용을 수정했다면 아파치 서비스를 재기동해야 바뀐 설정이 적용됩니다. 이 파일에 없는 설정값도 다른 설정파일들에 산재해 있을 수 있으며 이는 OS, 버전에 따라 다를 수 있습니다.
아래 아파치 docs 사이트에 접속하시면 설정에 대해 자세히 보실 수 있습니다.
https://httpd.apache.org/docs/2.4/en/
attribute | description | default | example |
ServerRoot | 아파치가 설치되어있는 최상위 디렉터리 | /etc/httpd | |
Timeout | 아파치가 클라이언트로부터 수신을 기다리는 최대 대기시간 (초단위) 만일 버퍼가 비어있다면, TCP 패킷이 도착할 때까지 아파치는 설정한 시간만큼 대기. | 60 | 20 (20초 동안 대기) |
PidFIle | 아파치 데몬의 PID를 기록할 파일 경로 설정 | logs/httpd.pid | /run/apache2/apache2.pid |
KeepAlive | 아파치가 지속적인 연결* 이 가능할지 여부를 on / off 로 설정 | on | on |
MaxKeepAliveRequests | KeepAlive 값이 on일 경우 한 연결 안에서 최대 요청 수를 설정. 서버 성능을 극대화 하려면 큰값으로 설정. 0으로 설정하면 무제한 |
100 | 0 (무제한) |
KeepAliveTimeout | KeepAlive가 on일 경우 연결이 맺어지면 끊지 않고 다음 요청을 대기하는 최대 시간. (초단위) 큰 값으로 설정 시 서버 성능 저하 |
5 | 10 |
StartServers | 서버 시작 시 생성할 자식 프로세스 수 기본값은 mpm, wokrer, event에 따라 다름 |
- | 8 |
MinSpareServers / MaxSpareServers |
유휴 자식 프로세스의 최대 / 최소값 설정 최소값일 때 최소값을 유지하기 위해 유휴 자식프로세스를 계속 생성 최대값일 때 최대값을 유지하기 위해 클라이언트 요청이 끝나면 자식 프로세스 계속 삭제 |
max : 10 min : 5 |
MinSpareServers 5 MaxSpareServers 20 |
MaxClients | 동시 접속 가능한 최대 클라이언트 수 | 256 | 1024 |
MaxConnectionsPerChild (or MaxRequestPerChild ) |
자식프로세스 하나가 처리할 수 있는 최대 커넥션 수 최대값에 도달하면 자식프로세스는 죽음 0일 경우 자식프로세스는 소멸되지 않음 |
0 | |
Listen | 서버가 listen할 포트 혹은 IP | Listen 80 Listen 8000 (80, 8000 포트로 수신) Listen 12.34.56.78:80 (특정 ip, 포트만 허용) |
|
LoadModule | 아파치에 추가할 외부 모듈 서버가 시작할 때 적용됨 |
LoadModule status_module "modules/mod_status.so" | |
ServerAdmin | 서버 관리자의 이메일 | example@email.com | |
DocumentRoot | 웹에 표시할 웹컨텐츠 루트 디렉터리 |
/usr/local/apache/htdocs | /usr/web (.../idnex.html로 요청 시 ../usr/web/index.html 응답) |
DirecotryIndex | 클라이언트의 요청이 파일 없이 경로로만 지정된다면 기본으로 반환할 파일 | index.html | index.htm (.../docs/ 으로 요청 시 ../docs/index.htm 으로 응답) |
ErrorLog | 아파치가 서버 에러 로그를 할 경로 | logs/error_log | /var/log/httpd/error_log |
AddDefaultCharset | 응답 content-type이 text/plain 이나ㅅtext/html일 경우 추가할 기본 charset | off | UTF-8 (Content-Type : text/html; charset=UTF-8로 응답에 들어감) |
* 지속적인 연결 (persistent connections) : 클라이언트와 한번의 연결 안에서 여러 번 서로 요청/응답을 주고받음. HTTP/1.0 까지는 한번의한 번의 요청 응답이 끝나면 TCP가 끊어지거나 예외적으로 클라이언트에 의해 요청할 경우에만 가능했으나, HTTP/1.1 이상부터는 설정 시 한 번의 연결 안에서 여러쌍의 요청/응답이 가능해짐
* 유휴 자식 프로세스 (idle child process) : 요청을 처리하고 있지 않은 (놀고 있는) 자식 프로세스
참고
https://news.netcraft.com/archives/category/web-server-survey/
https://httpd.apache.org/docs/2.4/en/mod/directives.html
https://httpd.apache.org/docs/current/ko/mpm.html
https://www.stigviewer.com/stig/apache_site_2.2unix/2013-04-11/finding/V-13730
'Programming > DevOps, Tools' 카테고리의 다른 글
[Software] 소프트웨어란 (0) | 2023.03.08 |
---|---|
JWT (JSON Web Token) 도입기 - JWT는 만능해결사인가 (0) | 2023.03.02 |
웹 (WEB), 웹어플리케이션, WAS, 웹 컨테이너... (1) | 2022.09.23 |
HTTP 프로토콜 초간단 요약 (0) | 2022.09.14 |
[LINUX] cron service (0) | 2022.09.01 |
댓글