ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • NGINX 기초
    웹서버/NGINX 2022. 5. 14. 22:22

    NGINX 기초

    해당 내용은 NGINX 쿡북을 정리한 내용입니다.

    웹 서버로 사용한 프로그램은 보통 ApacheNginx 를 사용합니다. 그 중에서도 Nginx 의 사용량을 보면 Apache 보다 더 많이 사용되는 걸 알 수 있습니다. 그 이유로는 여러가지가 있겠지만 고성능 트래픽을 효과적으로 처리 할 수 있다 는 이유는 빼 놓을 수 없습니다. 이번 포스팅에서는 Nginx 의 기본적인 사용법과 할 수 있는 기능들 마지막으로 nginx 를 설치하면 볼 수 있는 파일들을 간략히 정리해보겠습니다.

    사용할 수 있는 기능

    Nginx 는 웹 서버로 주로 사용되지만 웹 서버로만 사용될 수 있는 도구는 아닙니다. 사용할 수 있는 기능은 아래와 같습니다.

    1. 로드밸런서
      • 여러 요청이 들어올 경우 하나의 인스턴스로 모든 트래픽을 감당하기 어렵습니다. 이때 인스턴스를 여러개 생성해 여러 트래픽을 여러 인스턴스에 보내줄 수 있습니다. 이렇게 트래픽을 분산해 주는 과정을 로드밸런싱 이라고 합니다. 이 역할을 담당하는것을 로드밸런서 라고 합니다.
    2. 웹서버
      • nginx 는 특정 주소로 들어온 요청에 대해 정적 파일(HTML, CSS, JS) 등을 보여줄 수 있습니다.
    3. 리버스 프록시
      • 서버의 정보를 감추는 것을 말합니다. 예를들어 Tomcat 이 8080 포트를 이용해 띄워졌다고 하고 이를 다른 사용자가 알고 있다면 서버의 정보를 과도하게 노출한것입니다. 사용자는 서버의 포트는 몰라도 서비스를 이용하는데 아무런 지장이 없고 오히려 알려진다면 서버는 보안에 취약해집니다. 이를 감추기 위해서 8080 포트를 80번 포트(HTTP) 로 대체 할 수 있는 기능을 말합니다.
    4. API 게이트 웨이
      • API 요청에 대한 최전방 입구가 될 수 있습니다.
    5. 콘텐츠 캐시
      • nginx 는 정적파일의 위치가 지정되어있다면 WAS 를 거치지 않고 특정요청에 대해서 콘텐츠를 캐시해서 사용자에게 전달 해 줄 수 있습니다.
    6. 웹 애플리케이션 방화벽(WAF)
    7. 컨텐츠 전송 네트워크(CDN)

    버전

    NGINX 는 여러버전이 있습니다. 여기서 말하는 버전이란 x.x.x 버전을 얘기하는 것이 아닌 MySQL 처럼 유료버전과 무료버전을 이야기합니다.

    무료버전은 Nginx 오픈 소스 버전이고 유료버전은 NGINX Plus, Nginx Control 입니다.

    유료버전은 무료버전에 없는 고급 기능들이 여러 포함되어있습니다. 대표적으로 Application Delivery Controller (ADC, 서버에서 구동되는 코드 혹은 코드의 산출물을 사용자에게 전달하는 과정에서 필요한 전송과 보안을 담당해 부하를 분산하고 가용성을 보장하는 하드웨어나 소프트웨어) 가 있습니다.

    다운로드 받는 법

    NGINX 는 여러 OS 버전에서 다운로드를 받을 수 있습니다. 여기선 ubuntu 버전만 알아보겠습니다.

    sudo apt update
    sudo install nginx -y

    nginx 설치 상태 점검하고 버전 확인하는 법

    nginx -v

    • nginx 버전 확인

    ps -ef | grep nginx

    • ps 는 동작중인 프로세스 목록을 보여주는 명령어 입니다.
    • ef 옵션은 모든 프로세스(e) 를 full 포맷(f) 으로 보여주는 것을 옵션입니다.
    • |(파이프) grep 명령어는 목록에서 특정 단어를 포함하는 결과를 검색하는 명령어 입니다.

    주요 설정 파일, 디렉터리, 명령어

    NGINX 주요 설정 파일과 디렉터리

    /etc/nginx/

    • NGINX 서버가 사용하는 기본 설정이 저장된 루트 디렉터리입니다.
    • NGINX 는 이곳에 저장된 설정 파일의 내용에 따라 동작합니다.

    /etc/nginx/nginx.conf

    • NGINX 의 기본 설정 파일로, 모든 설정에 대한 진입점입니다.
    • 워커 프로세스 개수, 튜닝 동적 모듈 적재와 같은 글로벌 설정 항목을 포함하며, 다른 NGINX 세부 설정 파일에 대한 참조를 지정합니다.
    • 디렉터리에 위치한 모든 설정 파일을 포함하는 최상위 http 블록을 갖고 있습니다.

    /etc/nginx/conf.d

    • 기본 HTTP 서버 설정 파일을 포함합니다.
    • nginx 디렉터리 내 파일 중 이름이 .conf 로 끝나는 파일은 앞서 언급한 /etc/nginx/nginx.conf 파일이 가진 최상위 http 블록에 포함됩니다.
    • 이처럼 NGINX 설정은 include 구문을 활용해 구조화함으로써 각 설정 파일을 간결하게 유지하면 좋습니다.
    • 몇몇 배포판에서는 NGINX 설치 시 conf.d 디렉터리 대신 site-enabled 디렉터리가 있고, symlink 를 통해 site-available 디렉터리에 저장된 설정파리을딜이 연결돼 있을 수 있습니다. 하지만 해당방식은 deprecated 되었습니다.

    /var/log/nginx

    • NGINX의 로그가 저장되는 디렉터리입니다.
    • access.logerror.log 파일이 있습니다.
      • access.log 는 NGINX 서버가 수신한 개별 요청에 대한 로그를 저장합니다.
      • error.log 는 오류 발생 시 이벤트 내용을 저장합니다. 만약, debug 모듈을 활성화 했다면 디버그 정보도 error.log 에 기록됩니다.

    NGINX 명령어

    nginx -h : NGINX 옵션에 대한 설명을 확인합니다.

    nginx -v : NGINX 버전 정보를 확인합니다.

    nginx -V : NGINX 버전 정보와 빌드 정보를 보여줍니다. 또한 nginx 바이너리에 포함된 설정 인수값들을 보여줍니다.

    nginx -T : NGINX 설정을 시험하고 설정 파일들을 화면에 보여줍니다.

    nginx -s signal

    • -s 매개변수는 지정된 신호(stop, quit, reload, reopen)를 NGINX 마스터 프로세스에 전송합니다.
      • stop : nginx 프로세스가 즉시 동작을 멈춥니다.
      • quit : 현재 진행 중인 요청을 모두 처리한 뒤 엔진엑스 프로세스를 종료합니다.(이를 graceful shutdown) 이라고 합니다.
      • reload : nginx 가 설정을 다시 읽어드리게 합니다.
      • reopen : 지정된 로그 파일을 다시 엽니다.
      • 더 많은 신호는 https://www.nginx.com/nginx-wiki/build/dirhtml/start/topics/tutorials/commandline/ 을 참고하면 됩니다.

    정적 컨텐츠 서비스하기

    server {
            listen 80 default_server;
            server_name www.example.com;
    ​
            location / {
                    root /usr/share/nginx/html;
                    # alias /usr/share/nginx.html;
                    index index.html index.htm;
            }
    }

    /etc/nginx/conf.d/default.conf 에 생성된 기본 HTTP 설정 파일을 다음과 같은 내용으로 변경합니다.

    만약 /etc/nginx/sites-enabled/default 에 같은 설정이 되어 있다면 경로가 겹치기 때문에 오류가 납니다. 이 경우엔 sites-enabled의 default 파일을 지웁니다.

    HTTP 프로토콜(80번 포트) 를 이용해 /usr/share/nginx/html 경로에 저장된 정적 컨텐츠를 제공합니다.

    코드 한줄한줄 분석해보겠습니다.

    server

    • 새로운 server 블록을 선언해 nginx 가 처리할 새로울 컨텍스트를 정의합니다.

    listen 80 default_server

    • nginx 가 80번 포트로 들어오는 요청을 수신하게 합니다.
    • 이 블록에 정의된 내용이 80번 포트에 대한 기본 컨텍스트가 되도록하고 default_server 매개 변수를 사용합니다.
    • 예제에서는 listen 지시자가 단일 포트만 사용하지만 필요에 따라 포트의 범위로 지정할 수 있습니다.

    server_name www.exmple.com

    • 서버가 처리할 호스트명이나 도메인명을 지정합니다.
    • 만약 default_server 매개변수를 통해 기본 컨텍스트가 설정되지 않았다면 nginx 는 요청 호스트 헤더값이 server_name 지시자에 지정된 값과 같을 떄만 server 블록에 지정된 내용을 수행합니다.
      • 서버가 사용할 도메인이 지정되지 않았다면 예제와 같이 default_server 매개변수를 사용해 기본 컨텍스트를 정의하고 server_name 지시자는 생략할 수 있습니다.

    location

    • location 블록은 URL 의 경로를 기반으로 합니다.
    • nginx 는 요청된 URI 에 가장 적합한 location 블록을 찾습니다.

    root /usr/share/nginx/html;

    • root 지시자는 주어진 컨텍스트에서 콘텐츠를 제공할 때 서버의 어떤 경로에서 파일을 찾을지 알려줍니다.
    • nginx 는 root 지시자에 정의된 경로에 수신된 URI 값을 합쳐 요청된 파일을 찾습니다.
    • location 지시자에 URI 접두어를 사용했다면 이 값도 root 지시자에 지정된 값과 합쳐집니다.
      • location /hello 라고 하고 root /usr/share/nginx/html 로 설정되어 있다면 파일을 찾을 때 /hello/usr/share/nginx/html 로 찾는 다는 의미

    # alias /usr/share/nginx.html;

    • root 지시자처럼 보여줄 파일을 찾을 때 URI 접두어와 합쳐지는 것을 원하지 않으면 alias 지시자를 사용하면 됩니다.

    index index.html index.htm;

    • index 지시자는 URL 에 더는 참고할 경로 정보가 없을때 엔진엑스가 사용할 기본파일 혹은 확인할 파일 목록을 알려줍니다.

    무중단 설정 리로드하기

    패킷을 손실없이 즉, nginx 서버를 중지하지 않고 설정을 리로드 하기 위해선 아래와 같이 리로드 signal 을 보내면 됩니다.

    nginx -s reload

    • 동작 중인 nginx 의 마스터 프로세스에 리로드 signal 을 보내 설정을 다시 읽도록 합니다.

    참고

    URI : 경로나 도메인 뒤 URL 문자열을 통합 자원 식별자 URI 라고 부릅니다.

    location 지시자 공식 문서

    댓글