티스토리 뷰

Server

Nginx 설치와 기본 환경 설정

니용 2021. 6. 18. 21:17
반응형

웹서버를 사용할 때 apache와 더불어 nginx 를 많이 사용합니다. 읽을 때는 엔진엑스라고 읽게 되는데, 이번 글에서는 nginx를 설치하고 환경 설정을 하는 방법을 작성해보려 합니다. 

 

웹 서버

웹 서버란 이미지, 동영상, 자바스크립트, HTML 등의 정적 리소스를 제공하는 서버 시스템입니다. 주로 HTTP 통신 프로토콜을 통해 리소스를 전잘하지만 FTP 나 SMTP와 같은 다른 프로토콜도 지원합니다. 웹 서버는 클라이언트와 WAS의 중간 다리 역할을 하기도 합니다. 주로 어플리케이션 서버의 인터셉터가 생성되기 전 가로채는 역할도 합니다. 주 역할은 아래와 같습니다. 

1. 데이터 전송

  • HTML 텍스트 파일을 비롯해 이미지나 음성 데이터 같은 정적 컨텐츠를 웹 클라이언트에 전송
  • 최근 유행하는 클라이언트 사이드 렌더링(React, Vue, Angular 등)에 의해 생성된 빌드 파일 제공 

2. Application 실행

  • 웹 서버가 직접 웹앱 서버를 실행하여 이미지 압축 등의 기능도 사용 가능

3. Proxy (가장 중요)

  • 클라이언트의 요청을 Application Server로 전달
  • 캐시 처리와 로드 밸런싱, 암호화등의 기능 사용

 


nginx 특징

가장 큰 특징은 Asynchoronous Event Driven(비동기적 이벤트 수행)에 의해 Non Blocking 처리를 하게 됩니다. 그렇기 때문에 동시 접속수에 따라 서버의 크기를 Scale up(확장)과 Scale down(축소) 가 가능합니다. 그렇기 떄문에 프로세스 기반인 apache 서버보다 소비 메모리량이 적어지며 기하급수적으로 들어오는 요청에 따른 처리를 수월하게 할 수 있습니다. 

그리고 Single Thread 기반으로 Master / Worker 프로세스 구동 방식을 채택하였기 때문에 Context Switching을 하지 않습니다. 그렇기 때문에 CPU 사용률을 감소시킬 수 있습니다.

하지만 결국 하드웨어 자원을 사용하는 것이기 떄문에 IO가 자주 일어나는 모델에서는 Apache가 더 유리합니다. 이를 대응하기 위해 nginx에서는 Proxy 처리를 하기 때문에 단점을 보완한다고 볼 수도 있습니다.


nginx 설치

설치 방법은 공식 사이트에 보다 자세히 나와있습니다. ubuntu의 경우 아래와 같이 설치합니다.

# apt repository 에 설치하고자 하는 nginx 버전 추가 
# ubuntu 버전 (18.04: bionic, 16.04: xenial)
sudo touch /etc/apt/sources.list.d/nginx.list
echo "deb http://nginx.org/packages/ubuntu/ bionic nginx" | sudo tee -a /etc/apt/sources.list.d/nginx.list
echo "deb-src http://nginx.org/packages/ubuntu/ bionic nginx"| sudo tee -a /etc/apt/sources.list.d/nginx.list

# 인증 키 등록
wget http://nginx.org/keys/nginx_signing.key
sudo apt-key add nginx_signing.key

# 저장소 업데이트
sudo apt-get update

# nginx 설치
sudo apt-get install nginx

그리고 CentOS 이면 아래와 같이 설치합니다.

# nginx 공식 저장소 추가
sudo vim /etc/yum.repos.d/nginx.repo
# 파일에 아래 내용 추가
  [nginx]
  name=nginx repo
  baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
  gpgcheck=0
  enabled=1

# nginx 설치
sudo yum install nginx

설치 후에 아래 명령어를 이용하여 버전을 확인하고 서비스를 시작합니다.

# nginx 버전 확인
nginx -v

# nginx 시작
sudo /etc/init.d/nginx start

 


 

nginx 환경 변수

/etc/nginx/nginx.conf 파일을 열게되면 아래와 같은 내용이 나옵니다.

# worker 프로세스를 실행할 사용자 설정
# - 이 사용자에 따라 권한이 달라질 수 있다.
user  nginx;
# 실행할 worker 프로세스 설정
# - 서버에 장착되어 있는 코어 수 만큼 할당하는 것이 보통, 더 높게도 설정 가능
worker_processes  1;

# 오류 로그를 남길 파일 경로 지정
error_log  /var/log/nginx/error.log warn;
# NGINX 마스터 프로세스 ID 를 저장할 파일 경로 지정
pid        /var/run/nginx.pid;


# 접속 처리에 관한 설정을 한다.
events {
    # 워커 프로레스 한 개당 동시 접속 수 지정 (512 혹은 1024 를 기준으로 지정)
    worker_connections  1024;
}

# 웹, 프록시 관련 서버 설정
http {
    # mime.types 파일을 읽어들인다.
    include       /etc/nginx/mime.types;
    # MIME 타입 설정
    default_type  application/octet-stream;

    # 엑세스 로그 형식 지정
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    # 엑세스 로그를 남길 파일 경로 지정
    access_log  /var/log/nginx/access.log  main;

    # sendfile api 를 사용할지 말지 결정
    sendfile        on;
    #tcp_nopush     on;

    # 접속시 커넥션을 몇 초동안 유지할지에 대한 설정
    keepalive_timeout  65;

    # (추가) nginx 버전을 숨길 수 있다. (보통 아래를 사용해서 숨기는게 일반적)
    server_tokens off

    #gzip  on;

    # /etc/nginx/conf.d 디렉토리 아래 있는 .conf 파일을 모두 읽어 들임
    include /etc/nginx/conf.d/*.conf;
}

마지막으로 수정된 설정값을 적용하기 위해 재기동합니다.

# ubuntu
$ service nginx reload;

# centOS
$ systemctl start nginx

 

반응형
댓글
공지사항