NGINX

­Valentine·2021년 11월 14일
0

CS

목록 보기
1/23
  1. 소개

    • 읽기 : 엔진 엑스
    • 아파치와 함께 세계에서 가장 많이 쓰고 있는 웹서버 중 하나
    • 비동기 처리 방식
      • 한 개 또는 고정된 프로세스만 생성하여 사용하고, 비동기 방식으로 요청들을 동시에 처리 가능
      • Apache는 요청을 처리할 때 새로운 thread를 생성하여 처리.
        • 접속하는 사용자가 많으면 그만큼 thread가 생성되어 CPU와 메모리 자원의 소모가 증가
    • 동시접속자(약 700명) 이상이라면 서버를 증설하거나 Nginx 환경을 권장
  2. 역할

    • 정적 파일을 처리하는 HTTP 서버로서의 역할
    • 응용프로그램 서버에 요청을 보내는 리버스 프록시로서의 역할
      • 프록시 서버 : 서버와 클라이언트 사이에 대리로 통신을 수행하는 중계 기능을 하는 것
      • 포워드 프록시 : 내부망에 함께 있는 클라이언트가 인터넷을 통해 어딘가에 있는 서버로 요청을 보내려고하면 이 요청을 받아 연결. 클라이언트 앞단에서 요청을 처리. 서버에게 클라이언트가 누구인지 감추는 역할. 서버가 응답받은 IP는 포워드 프록시 서버의 IP
      • 리버스 프록시 : 인트라넷 서버 앞단에서 요청을 처리. 서버가 누구인지 감추는 역할. 내부망의 서버는 DB와 연결 되어있으므로 최전방에 있으면 보안에 취약해 지기 때문에 사용. 클라이언트는 리버스 프록시 서버를 먼저 호출하게 되기 때문에 실제 서버의 IP를 알 수 없다.
  3. 장점

    • 보안 : IP를 숨기고 프록시 서버의 IP만 공개함으로써 해킹에 대비
    • 트래픽 분산 :
      • 저렴한 비용으로 다수의 서버를 증설하여, 고가의 서버를 구매할 필요가 없다.
      • 1대의 서버가 멈추더라도 서비스 중단 없이 다른 서버가 ****서비스를 계속 유지할 수 있다.
      • 서버 확장 작업을 하더라도 서비스 중단 없이 유지가 가능하다.
    • 성능 : 캐싱과 트래픽 분산을 통해 성능 향상
  4. 설치 방법

    sudo apt-get install nginx
    • nginx.conf 파일에서 설정을 조작할 수 있다
      worker_processes  1;
      events {
          worker_connections  1024;
      }
      http { 
          include       mime.types;
          server {
              listen       80;
              location / {
                  root   html;
                  index  index.html index.htm;
              }
          }
      }
      • worker_processes : 몇개의 워커 프로세스를 생성할 것인지 지정하는 지시어. 1이면 모든 요청을 하나의 프로세스로 실행하겠다는 뜻. CPU 멀티코어 시스템에서 1이면 하나의 코어만으로 요청을 처리하는 셈이다. auto로 놓는 경우가 많다.
      • events - worker_connections
        • 하나의 프로세스가 처리할 수 있는 커넥션의 수
      • 최대 접속자수 = worker_processes X worker_connections
      • http 블록 : 하위에 server 블록, 그리고 location 블록을 갖는 루트 블록 이다. 여기서 선언된 값은 하위 블록에 상속된다. 서버의 기본값이 된다.
        • include : server 블록에서도 사용할 수 있다. conf.d 에 정의해놓은 파일들을 적용하는데 사용된다.
      • server 블록: 하나의 웹사이트를 선언하는데 사용된다. server 블록이 여러개이면, 한대의 머신(호스트)에 여러 웹사이트를 서빙할 수 있다.
      • location 블록 : 요청을 배분
      • 캐싱
        server {
                ...
         
                # 로컬 설정, 웹페이지, api 요청등은 캐싱하지 않고 매번 새로운 자료로 제공한다.
                location ~* \.(?:manifest|html?|php?|xml|json)$ {
                        expires -1;
                }
         
                # 홈페이지를 구성하는 스타일, 스크립트는 1달 정도 캐싱한 후 새로운 정보를 제공한다.
                location ~* \.(?:css|js)$ {
                        expires 1M;
                        access_log off;
                        add_header Cache-Control "public";
                }
         
                # 홈페이지를 구성하는 이미지등의 리소스는 변화가 거의 없으므로 한 번 다운로드하면 3달 정도 캐싱한다.
                location ~* \.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|svgz|mp4|ogg|ogv|webm|htc)$ {
                        expires 3M;
                        access_log off;
                        add_header Cache-Control "public";
                }
        }
        • expires : 캐시가 만료되는 일자, 일, 월, 년 단위
          add_header Cache-Control "public", max-age=[];
          초 단위로도 사용 가능
        • access_log : 해당 파일을 읽어들일때 로그를 남기는지 여부
      • 로드 밸런싱
        • 가상 호스트 : 실제로 호스트는 한대지만, 가상으로 마치 호스트가 여러개 존재하는 것처럼 동작하게 함
          • 규칙은 아무것도 적지 않는다면 Round Robin으로 동작
          • ip_hash : ip를 해시값으로 분배. 한번접속했던 아이피는 계속 같은 서버를 쓰게된다. 경로 보장이 된다.
          • hash - 해시한 값으로 분배한다.
            • ex)hash $remote_addr <- 이는 ip_hash와 같다.
          • random - 랜덤 분배
          • least_conn - 연결수가 가장 적은 서버를 선택함과 동시어 가중치를 고려해서 분배
          • least_time - 연결수가 가장 적으면서 평균 응답시간이 가장 적은 쪽을 선택해서분배

나는 nginx 설정이 정말 싫다구요

Nginx 이해하기 및 기본 환경설정 세팅하기

NGINX 환경설정 - NGINX

[Nginx] Nginx 이해하기

[WebServer][nginx]nginx로 로드밸런싱 하기-(4)

profile
천체관측이 취미

0개의 댓글