Skip to content

SOONG-E/Webserv

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Webserv

소개

Webserv는 웹 브라우저와 상호 작용하고 HTTP 요청을 처리하는 자체 HTTP 서버를 구현한 프로젝트입니다.

기능

  • 사용자 정의 HTTP 서버: 외부 라이브러리 없이 C++98만으로 구축되어 호환성과 성
  • 기본 HTTP 메서드 지원: GET, POST, DELETE 요청을 처리합니다.
  • 설정 파일 지원: 설정 파일을 통해 서버 설정이 가능합니다. (NGINX의 'server' 설정과 유사합니다.)
  • 다중 포트 리스닝: 설정 파일에 지정된 다수의 포트에서 리스닝이 가능합니다.
  • 오류 처리: 기본 오류 페이지와 HTTP 응답 상태 코드를 포함합니다.
  • 파일 업로드 지원: 클라이언트가 파일을 업로드할 수 있습니다.
  • 정적 웹사이트 호스팅: 정적인 웹사이트를 제공합니다.
  • 추가 기능: 쿠키와 세션 관리, 다중 CGI 처리를 지원합니다.

설치

요구 사항

  • C++98 컴파일러
  • Make
  • 설정 파일

빌드 방법

  1. 저장소 복제
    git clone <저장소-URL>
    
  2. 프로젝트 디렉터리로 이동
    cd Webserv
    
  3. 컴파일
    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 스크립트를 탐색할 경로를 지정합니다.