nginx 실습

roon-replica·2022년 6월 17일
0

server

목록 보기
1/4

1. core http modules

설치, 명령어

  • 설치

    brew install nginx
  • 명령어들

    • 시작

      brew services start nginx // 주소창에 localhost:8080 입력
    • 재시작

       brew services reload nginx
    • 종료

      brew services stop nginx
    • nginx 설정 파일들 경로? 확인

      nginx -V
       nginx -t

      /opt/homebrew/Cellar/nginx/1.21.6_1로 가서 ls -la 하면 symbolic link인 'html'이 있음
      ../../../var/www 이고 절대경로로 표현하면 /opt/homebrew/var/www임.
      여기로 가면 메인페이지인 index.html이 있음

설정

  • 설정파일 path
    /opt/homebrew/etc/nginx/nginx.conf (맥 버전에 따라 경로 다름)
  • 설정파일 분리
    includes로 포함시킬 수 있음

  • multiple virtual host 설정
    여러 도메인을 호스팅하는 가상 호스팅 기능 사용 가능

    /etc/hosts (DNS)에 (ip, 도메인) 추가
    nginx.conf server/server_name에 도메인 추가

    virtual host 등록할 때 wildcard도 사용 가능

  • worker process? 설정
    고성능 환경에서 worker process의 수는 매우 중요하다고 함
    worker_process의 값은 서버의 코어 수와 동일하게 설정할 것을 권장
    nginx가 처리할 수 있는 최대 접속 수 = worker_process worker_connections ( 8 1024 = 8192)

  • 업로드 파일 크기 확장, 기타 클라이언트 관련 설정
    413 payload too large 에러 발생 시
    client timeout 설정

  • 사용자 식별용 쿠키 설정하기

  • 에러 페이지 설정

2. rewrite module

간단한 리다이렉트 설정

  • 웹 리소스 URL이 변경될 경우
    SEO(Search Engine Optimization)이 상실된다고 함.
    그리고 예전에 북마크를 해둔 사용자는 404 에러를 접하게 됨
    그래서 리다이렉션을 설정해 주면 좋음.

  • 301(permanent) 리다이렉션

    시간이 많이 흘러, 과거 북마크를 해둔 유저들이 과거 URL로 접근하지 않는 것이 확실해지면 nginx의 redirect 설정을 제거하는 것도 고려 가능.
    permanent 키워드를 사용하지 않으면 302(temporary) 리다이렉션을 하게 된다고 하는데 상태코드는 304(not modified) 또는 301이 됨..

  • 변수 사용
    request method에 따라 어떤 처리하기
  • 전송률 제한
    응답속도를 제어하기 위한 옵션
    limit_rate 100으로 바꾸면 브라우저에서 렌더링이 엄청 느리게 되는 것 확인할 수 있음
    • limit_rate_after : Sets the initial amount after which the further transmission of a response to a client will be rate limited
  • HTTP referer header 체크해서 스팸막기
    스팸(댓글 등)은 SEO의 부정적인 측면에서 파생된 자동화된 spammer bot들에 의해 생성된다고 함
    http request에 referer가 항상 있는 것은 아님
  • map을 이용한 간결한 환경설정?

3.log module

log module이 할 수 있는 것

  • 로그 경로, 레벨 설정
  • 404 에러 기록 하지 않기?
  • 프로파일별로 로그 나누기
  • 로그 파일 캐시 설정?
  • 가상 호스트마다 개별적인 에러 로그 적용
  • 맞춤형 로그? 를 이용한 편리한 분석

로그 경로, 레벨 설정

  • https://docs.nginx.com/nginx/admin-guide/monitoring/logging/

  • 로그 파일 설정이 안 되고 있음.. (4.29.금)
    → nginx -V로 access_log, error_log 위치를 확인해야 함!
    default로 /opt/homebrew/var/log/nginx 아래에 기록되고 있었음!
    경로 제대로 설정하니 정상 동작함

  • nginx는 접근 로그와 에러 로그를 분리해서 기록함

  • 로깅 설정
    여러 로그 포맷을 설정할 수도 있음

  • 404 에러 기록하지 않기
    크롤러들이 404 많이 발생시켜서 로그 부하를 증가시킨다고 함..

  • log_format 안에서 사용할 수 있는 변수들
    argsbodybytessentargs body_bytes_sentcontent_length
    $host

  • log rotate
    안해봤음

7. nginx를 리버스 프록시로 활용

overview

대부분의 nginx 응용에서는 nginx가 reverse proxy로 활용된다고 함.
변하지 않는 정적 컨텐츠들 ( 이미지, 동영상, css, js, pdf, 일부 HTML 등)을 프록시 서버가 서비스하면 더 빠른 응답을 할 수 있다

  • reverse proxy
    클라이언트와 서버 중간에서 중개자 역할
    클라이언트의 요청을 받아서 proxied 서버로 보냄
    back단의 서버에서 자원을 찾아서 클라이언트에 제공
    http 또는 non http 서버로의 요청 모두 프록시 가능

  • passing request to proxied server
    proxy 기능을 활용하려면 location directive 안에 proxy_pass를 명시해줘야 함
    upstream 설정 잘못하면 502 bad gateway 에러 발생
    특정 url로 접근하면 proxied 서버로부터 얻은 결과 보여줄 수 있음

기능

  • passing request header
    proxied request에서 default로 nginx는 2개의 헤더를 재정의한다고 함..

    • Host 헤더
      $proxy_host로 설정됨

    • Connection 헤더
      close?로 설정됨

    • proxy_set_header directive 사용하여 재정의 가능
      location, http, server 등 아무데서나 정의 가능

  • 버퍼

    • proxy_buffers 디렉티브가 요청에 대한 버퍼의 크기, 개수를 제어함.
      이 설정으로 응답 더 빨리 할 수 있음 ( default로 켜져 있음)
  • proxy bind 
    sticky하게 특정 백엔드(upstream)으로 프록시되도록 하는거?

설정

  • 설정 스크립트

  • 프록시 관련 설정을 별도의 파일로 빼기

  • 캐시 설정

    • proxy_cache_path
      Sets the path and other parameters of a cache

    • proxy_temp_path
      Defines a directory for storing temporary files with data received from proxied servers

      작은 html 파일을 서비스하는데 nginx에서 캐시하면 4ms 정도, 캐시 안 하면 25ms 정도 걸림

      설정 스크립트

  • 리버스 프록시와 다중 백엔드
    upstream block을 만들어서 설정 가능
    잘 기억 안 남

  • 로드밸런싱 설정
    로드밸런싱 = 부하 골고루 분산하기
    3rd 파티 모듈 다운받아서 설정해야 하는듯?
    사용법 잘 모름

profile
집중 ➝ 프로세서↑ 시간 투자 ➝ 디스크↑

0개의 댓글