Webserv는 웹 브라우저와 상호 작용하고 HTTP 요청을 처리하는 자체 HTTP 서버를 구현한 프로젝트입니다.
- 사용자 정의 HTTP 서버: 외부 라이브러리 없이 C++98만으로 구축되어 호환성과 성
- 기본 HTTP 메서드 지원: GET, POST, DELETE 요청을 처리합니다.
- 설정 파일 지원: 설정 파일을 통해 서버 설정이 가능합니다. (NGINX의 'server' 설정과 유사합니다.)
- 다중 포트 리스닝: 설정 파일에 지정된 다수의 포트에서 리스닝이 가능합니다.
- 오류 처리: 기본 오류 페이지와 HTTP 응답 상태 코드를 포함합니다.
- 파일 업로드 지원: 클라이언트가 파일을 업로드할 수 있습니다.
- 정적 웹사이트 호스팅: 정적인 웹사이트를 제공합니다.
- 추가 기능: 쿠키와 세션 관리, 다중 CGI 처리를 지원합니다.
- C++98 컴파일러
- Make
- 설정 파일
- 저장소 복제
git clone <저장소-URL>
- 프로젝트 디렉터리로 이동
cd Webserv
- 컴파일
make
다음과 같이 서버를 실행합니다.
./webserv [설정 파일]
설정 파일이 지정되지 않은 경우, 서버는 기본 설정 파일(conf/default.conf
)을 사용합니다.
설정 파일을 통해 각종 서버 동작을 정의할 수 있습니다.
- 각 서버의 포트와 호스트 지정
- 서버 이름 지정
- 오류 페이지 사용자 정의
- 클라이언트 본문 크기 제한
- 특정 경로에 대한 설정: 허용할 HTTP 메서드, 리다이렉션, 디렉토리 목록 등
설정 파일은 하나 이상의 server 블록으로 구성됩니다.
server {
listen 0.0.0.0:80;
server_name example.com;
location / {
...
}
}
- listen: 서버가 요청을 수락할 주소와 IP에 대한 포트를 설정합니다.
- server_name: 가상 서버의 이름을 설정합니다. 첫 번째 이름이 기본 서버 이름이 됩니다.
- location: 하나 이상의 location 블록을 설정할 수 있습니다.
- allowed_methods: 허용할 메서드를 지정하고 다른 메서드는 자동으로 차단합니다.
- client_max_body_size: 클라이언트 요청 본문의 최대 허용 크기를 설정합니다.
- root: 요청의 루트 디렉터리를 설정합니다.
- index: 인덱스로 사용될 파일을 정의합니다.
- autoindex: 디렉터리 목록 출력을 활성화하거나 비활성화합니다.
- return: 처리를 중지하고 지정된 리다이렉션 URL을 클라이언트에 반환합니다.
- CGI_EXTENSION: CGI 스크립트의 확장자를 지정합니다.
- CGI_PATH: CGI 스크립트를 탐색할 경로를 지정합니다.