단의 개발 블로그

Nginx 시작하기 본문

Web/Nginx

Nginx 시작하기

danso 2024. 8. 28. 20:51

Nginx란

높은 성능과 안전성 그리고 현재 가장 많이 사용하는 웹 서버다. 웹 서버는 클라이언트 요청에 따라 정적 파일을 응답하거나, 다른 서버로 요청을 보내는 등의 역할을 한다. Nginx는 보통 아차피 웹 서버와 비교를 많이 하는데, 이 둘의 차이는 요청 처리 방식에 있다. 아파치의 경우 사용자의 요청이 들어오면 새로운 스레드를 생성하여 처리한다. 요청이 많을 수록 자원을 더 소모하게 되는 반면 nginx는 Event-driven구조로 동작한다. 

Event Driven 구조는 아래와 같다.

  • Master Process가 설정 파일에 입력된 숫자대로 작업을 처리하는 Work Process를 생성
  • 이벤트는 커넥션, 새로운 요청 처리를 의미
  • 이벤트는 운영체제 커널이 Queue 형식으로 Work에 전달, 처리 완료까지 비동기 방식으로 대기
  • Work는 하나의 스레드로 이벤트를 처리, 쉬지 않고 해당 이벤트를 처리
  • 작업 시간이 길다면 스레드 풀에 위임하고 큐의 다른 작업을 처리

 

Nginx 설치하기 (Linux)

Nginx는 아래 명령어를 통해 설치한다.

sudo apt update
sudo apt install nginx

 

 

구조 및 명령어

디렉토리 및 설정파일

/etc/nginx/

엔진엑스 서버가 사용하는 루트 디렉토리다. 엔진엑스는 저장된 설정 파일의 내용에 따라 동작한다.

 

/etc/nginx/nginx.conf

엔진엑스 기본 설정파일로 모든 설정에 대한 진입점이다. 워커 프로세스 갯수, 튜닝, 동적모듈 등 글로벌 설정을 포함하여 다른 엔진엑스 세부 설정에 대한 참조를 지정한다. 

 

/etc/nginx/conf.d/

기본 http 서버 설정 파일을 포함한다. 디렉토리 내 파일 이름이 .conf로 끝나는 파일은 앞서 모든 설정에 대한 진입점에 포함된다. include 구문을 활용해 구조화 함으로써 각 설정을 간결하게 유지하는게 좋다. 몇몇 설치 시 conf.d 디렉토리 대신 site-enable에서 symlink를 통해 site-available 디렉토리에 저장된 설정 파일이 연결되는데 이 방식은 구 버전에서 사용한다.

 

/var/log/nginx/

nginx의 로그가 저장되는 디렉토리다. 접근, 에러에 대한 파일이 나눠져 있으며 디버그 설정 시 디버그 정보도 오류에 포함한다.

 

명령어

nginx -h : 도움말

nginx -v : 버전 정보

nginx -V : 버전 정보 + 빌드 정보

nginx -t : 설정 문법 검사

nginx -T : 설정 시험 후 결과 화면 출력

nginx -s signal : s뒤에오는 신호에 따라 마스터 프로세스의 동작을 제어한다. stop, quit, reload, reopen 등이 있다.

 

 

버전 정보 제거

엔진엑스 오류가 발생할 경우 에러 페이지를 띄운다. 이때 엔진엑스 버전 정보가 노출되는데, 해당 버전 정보를 제거하는 옵션을 추가한다. 악의적인 사용자가 해당 엔진엑스 버전 정보를 알게될 경우, 특정 버전에 있던 버그로 서비스에 악용할 수 있기 때문이다. 아래 파일을 수정하고 해당 옵션을 추가하자. 

vi /etc/nginx/nginx.conf

# 문법 검사 ok 되면 다음 진행한다.
sudo nginx -t

# 엔진엑스는 종료하지 않고 변경된 옵션으로 시작하는 방법
systemctl reload nginx

 

 

서버의 아이피로 요청하면 아래와 같은 화면이 나온다.