WEB Server - NGINX HTTP 설정 - CentOS 7




    이전 포스팅에서 설치 및 서비스 제어 등등 알아보았고 이제 부터 본격적으로 NGINX에 설정 및 최적화을 진행하려면 설정하기에 NGINX에 환경설정 구조를 파악해야 됩니다

    이번 포스팅에서는 NGINX의 설정 파일의 구조는 어떻게 되어 있고 서버에 맞게 최적화하려면 어떻게 부분을 조작해야 되는지 알아보도록 하겠습니다.



    이전 글 :


    서버와 클라이언트 그리고 HTTP - https://server-talk.tistory.com/291


    WEB Server - NGINX 알아보기 - https://server-talk.tistory.com/297 

    WEB Server - NGINX Comfile 설치하기 - https://server-talk.tistory.com/301 

    WEB Server - NGINX 서비스 제어 - https://server-talk.tistory.com/302 

    WEB Server - NGINX 구성파일 및 기본설정 - CentOS 7 - https://server-talk.tistory.com/303 

    WEB Server - NGINX HTTP 설정 - CentOS 7 https://server-talk.tistory.com/304










     NGINX 모듈 기본 구조





    위 그림은 NGINX의 대략적인 구조 입니다 NGINX는 핵심 모듈(Core Moudle), 이벤트 모듈(Event Module), 구성 모듈(Configuration Module)로 구성되어 있습니다.




    1. 핵심 모듈(Core Module)


    worker_processes  2;
    


    work_processes 같은 nginx.conf 파일의 최상단에 위치하고 기본 적인 방식을 정의 합니다.




    2. 이벤트 모듈(Event Module)


    events {
        worker_connections  1024;
    }
    


    NGINX에서 이벤트 모듈은 nginx.conf 설정 파일에서 events 블록 안에 정의 합니다.




    3. 구성 모듈 (Configuration Module)


        include       mime.types;
        include       sites-available/*.conf;
    


    NGINX에서 include 를 통해 다른 파일들을 포함할 수 있게 해주는 모듈 입니다.




    4. HTTP 모듈

    HTTP 구성하는데 사용되는 필수 구성요소와 가상 호스트 등등 HTTP 구성하는 모든 설정을 담당합니다




    NGINX 모듈 정보


    핵심 모듈(Core Module) : NGINX 의 프로세스관리, 보안, 필수 기능 등등 설정하는 부분 입니다


    이벤트 모듈(Event Module) : NGINX가 네트워크 동작방법에 설정하는 부분 입니다


    구성 모듈 (Configuration Module) : NGINX에서 구조 Include를 통해 외부 파일을 포함 시키는 부분입니다


    HTTP 모듈 : NGINX에서 웹사이트를 설정하는 부분 입니다








     NGINX 기본 튜닝



    1. NGINX 프로세스 사용자 및 그룹


    설정 : user [사용자] [그룹명];

    기본값 : NGINX 컴파일시 지정됩니다

    설명 : 보안적인 이유로 NGINX에 전용 사용자 그룹을 만들고 보안에 문제가 되지 않는 선에서 적절한 권한을 주어야 되며, 그룹명은 필수는 아닙니다.




    2. NGINX 프로세스 개수


    설정 : worker_processes [숫자];

    권장 값 : worker_processes auto;

    설명 : 프로세스 수를 지정입니다 CPU 코어당 1개의 프로세스를 갖도록 설정하거나 auto로 설정하여 NGINX에서 CPU 코어 수를 감지하여 설정하는 방법도 좋습니다.



    3. NGINX 404 에러 로그


    설정 : log_not_found [on or off];

    권장 값 : log_not_found on;

    설정 : 404 에러 남길 여부 입니다 검색봇 및 수많은 로그가 쌓이므로 off로 하여 적용하여 로그를 남기지 않는 것이 좋습니다



    4. NGINX 프로세스당 연결수


    설정 : worker_connections [숫자];

    기본값 : worker_connections 1024;

    설명 : NGINX에서 프로세스당 동시에 연결 수 입니다 예로 사용중인 서버가 CPU 코어가 2개라면 worker_processes 2개로 지정하였을 경우 연결수를 worker_processes * worker_connections 로 2048개의 동시 연결을 처리 할수 있습니다






     NGINX HTTP 모듈



    NGINX는 HTTP 모듈은 3개의 블록으로 구성됩니다




    위 그림과 같이 NGINX는 HTTP, SERVER, LOCATION 구성 됩니다



    NGINX HTTP 모듈 블록


    HTTP 블록 : NGINX 구성 파일의 최상위에 삽입되며, SERVER, LOCATION의 상위 블록입니다 설정된 값은 하위 블록에 상속 됩니다.


    SERVER 블록 : 웹사이트를 추가하는 1개를 선언하는데 사용되며, SERVER 블록을 여러 개 만들어서 동시에 여러 사이트 운영이 가능합니다.


    LOCATION : SERVER 블록 안에 특정 위치 디렉토리 URL 조작을 처리하는데 사용됩니다.




    http { 
        include       mime.types;
        sendfile        on;
        keepalive_timeout  65;
        default_type  application/octet-stream;
    
        server {
            listen       192.168.85.177:80;
            server_name  server-talk.com;
    	root	     /home/server_talk/public_html;
    
            access_log  /usr/local/nginx/logs/server-talk.com.access.log;
    	error_log   /usr/local/nginx/logs/server-talk.com.error.log;
            error_page   404  /50x.html;
    
            location / {
                root   html;
                index  index.html index.htm;
            }
        }  
    }
    



    사용블록 : HTTP

    사용법 : sendfile [on or off];

    설명 : sendfile 커널 호출을 사용하여 파일을 전송하며, 물리적인 위치에 따라 성능에 영향을 미칩니다.



    사용블록 : HTTP

    사용법 : server_tokens [on or off];

    설명 : NGINX를 버전 알릴지의 여부 입니다. (보편적으로 off로 하여 알리지 않습니다.)



    사용블록 : HTTP

    사용법 : default_type  application/octet-stream;

    설명 : MIME 타입 기본 설정입니다.



    사용블록 : HTTP, SERVER

    사용법 : error_page [에러코드] /경로/문서파일이름.html;

    설명 : 에러 페이지를 지정합니다.



    사용블록 : SERVER 

    사용법 : listen [IP]:[포트];

    설명 : Apache의 가상 호스트와 같이 IP를 지정하고 HTTP 80 포트나 HTTPS 443 포트를 지정합니다.


    사용블록 : SERVER

    사용법 : server_name [도메인] [도메인];

    설명 : 서버의 도메인을 입력하는 부분 입니다.


    사용블록 : SERVER

    사용법 : root [경로];

    설명 : 웹사이트의 경로를 지정하는 부분 입니다.


    사용블록 : HTTP, SERVER

    사용법 : access_log  /[경로]/파일명.log;

    설명 : 도메인의 access_log 설정 하는 부분 입니다.


    사용블록 :  HTTP, SERVER

    사용법 : error_log  /[경로]/파일명.log;

    설명 : 도메인의 error_log 설정하는 부분 입니다.


    사용블록 : HTTP, SERVER, LOCALTION

    사용법 : index [파일명];

    설명 : 홈페이지 접속했을 때 처음 페이지(기본 문서)를 지정하는 부분 입니다



    3. LOCATION 블록 : LOCATION 블록을 통해 URI 특정 URL 조작할 수 있습니다. (내용이 많으므로 다음 포스팅에서 알아보도록 하겠습니다)


    Posted by 서버이야기