728x90

nginx > 웹서버

  • 정적 파일을 처리하는 HTTP 서버로서의 역할
    • HTML, CSS, Javascript, 이미지와 같은 정보들을 웹브라우저에 전송하는 역할
  • 응용프로그램 서버에 요청을 보내는 리버스 프록시로서의 역할
    • 클라이언트가 가짜 서버에 요청하면, 프록시 서버가 배후서버(reverse server)로부터 데이터를 가져오는 역할을 한다.
    • 프록시 서버가 Nginx, 리버스 서버가 응용프로그램 서버를 의미
    • 웹 응용프로그램 서버에 리버스 프록시(Nginx)를 두는 이유는 요청에 대한 버퍼링 때문
    • 클라이언트가 직접 App 서버에 요청하는 경우 프로세스 1개가 응답 대기상태가 되어야 하기 때문에, 프록시 서버를 둠으로서 요청을 배분하는 역할을 함
      • nginx.conf 파일에서 location 지시어를 사용하여 요청을 배분
      • Nginx는 비동기 처리 방식(Event-Drive) 방식을 채택

설치

  • 리눅스 설치
su - # 관리자모드 
apt-get update # apt-get 업데이트 
sudo apt-get install nginx # nginx 설치 
nginx -v # nginx 버전
  • 윈도우 설치

nginx 기본 명령어

## nginx.exe가 존재하는 위치에서 아래 명령어 사용 ##

# 버전
nginx -v

# 시작 : nginx 설치경로로 가서 nginx.exe 더블클릭
nginx (nginx 명령어로 시작 가능하지만 cmd 멈춤.. 끄고 다른 cmd창 열어야함)

# 기동 중인 nginx에 명령하기
## 설정파일 변경 반영을 위해 reload (내린 후 다시 로드해야 되는 경우도 있음)
nginx -s reload;  
## 멈추기
nginx -s stop

nginx 디렉토리 구조 (리눅스 버전)

sudo find / -name nginx.conf # 디렉토리 찾기
cd /etc/nginx # nginx 경로로 이동

sudo apt-get install tree # 트리명령어 사용을 위해 설치
tree . # 현재 디렉토리 트리구조로 보기

nginx.conf 기본 환경설정 튜닝하기

nginx.conf 파일은 Nginx가 동작해야 할 방식을 설정 값을 통해 지정

root 계정만 수정이 가능하기 때문에, 수정이 필요하다면 sudo vim nginx.conf 를 통해 파일 열기

user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

events {
        worker_connections 768;
        # multi_accept on;
}

http {

        ##
        # Basic Settings
        ##

        sendfile on;
        tcp_nopush on;
        tcp_nodelay on;
        keepalive_timeout 65;
        types_hash_max_size 2048;
        # server_tokens off;

        # server_names_hash_bucket_size 64;
        # server_name_in_redirect off;

        include /etc/nginx/mime.types;
        default_type application/octet-stream;

        ##
        # SSL Settings
        ##

        ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
        ssl_prefer_server_ciphers on;

        ##
        # Logging Settings
        ##

        access_log /var/log/nginx/access.log;
        error_log /var/log/nginx/error.log;

        ##
        # Gzip Settings
        ##

        gzip on;

        # gzip_vary on;
        # gzip_proxied any;
        # gzip_comp_level 6;
        # gzip_buffers 16 8k;
        # gzip_http_version 1.1;
        # gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

        ##
        # Virtual Host Configs
        ##

        include /etc/nginx/conf.d/*.conf;
        include /etc/nginx/sites-enabled/*;
}


#mail {
#       # See sample authentication script at:
#       # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
#
#       # auth_http localhost/auth.php;
#       # pop3_capabilities "TOP" "USER";
#       # imap_capabilities "IMAP4rev1" "UIDPLUS";
#
#       server {
#               listen     localhost:110;
#               protocol   pop3;
#               proxy      on;
#       }
#
#       server {
#               listen     localhost:143;
#               protocol   imap;
#               proxy      on;
#       }
#}

최상단(Core 모듈)

user  seokhwa; # (default : www-data)
worker_processes  1;
error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;
  • user : NGINX 프로세스가 실행되는 권한
    • nginx는 마스터(master)와 워커(worker) 프로세스로 나뉜다.
    • 워커 프로세스가 실질적인 웹서버 역할을 수행한다.
    • user 지시어는 워커 프로세스의 권한을 지정한다.
    • 워커 프로세스를 악의적 사용자가 제어하면 해당 머신을 최고 사용자의 권한으로 원격제어하는 것이기 때문에 위험하다.
  • work_processes : NGINX 프로세스 실행 가능 수
    • 위에서 언급한 워커 프로세스이다. 실질적인 웹서버 역할을 한다.
    • auto도 무방하지만, 명시적으로 서버에 장착되어 있는 코어 수 만큼 할당하는 것이 보통이며, 더 높게도 설정 가능하다.
  • pid : NGINX 마스터 프로세스 ID 정보가 저장됨

events 블락

events { 
    worker_connections  1024;
    # multi_accept on; (디폴트값 : off) 
}
  • NGINX의 특징인 비동기 이벤트 처리 방식에 대한 옵션 설정
  • worker_connections는 하나의 프로세스가 처리할 수 있는 커넥션의 수
  • 최대 접속자수 = {worker_processes} X {worket_connections}

http 블락

http { 
    include       /etc/nginx/mime.types;
    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        on;
 
    #tcp_nopush     on; 
 
    keepalive_timeout  65;
 
    #gzip  on; 
 
    include /etc/nginx/conf.d/*.conf;
}
  • keepalive_timeout : 접속시 커넥션을 몇 초동안 유지할지에 대한 설정값
    • 이 값이 높으면 불필요한 커넥션(접속)을 유지하기 때문에 낮은 값 또는 0을 권장한다. (default=10)
  • servers token : NGINX의 버전을 숨길것인가에 대한 옵션
    • 보안상 주석을 제거하여 설정하는 것이 좋다.
  • types_hash_max_size, server_names_hash_bucket_size 호스트의 도메인 이름에 대한 공간 설정
    • 이 값이 낮을 경우 많은 가상 호스트 도메인을 등록한다거나, 도메인 이름이 길 경우 bucket 공간이 모자라 에러가 생길 수 있으므로 넉넉하게 설정하는 것이 좋다.

기타

  • include옵션 : 가상 호스트 설정이나 반복되는 옵션 항목을 inlcude를 통해 불러올 수 있다.
    • 리버스 프록시를 각 도메인에 설정한다고 했을 떄 헤더 처리 옵션등을 conf.d디렉토리에 넣어두고 incldue 명령을 통해 불러올 수 있다.
728x90

+ Recent posts