설치
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이 있음
설정파일 분리
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 설정
사용자 식별용 쿠키 설정하기
재작성(Rewrite)
요청을 통해서 주어진 URL의 규칙을 변경해서 웹서비스를 보다 유연하게 만드는 방법
웹 리소스 URL이 변경될 경우
SEO(Search Engine Optimization)이 상실된다고 함.
그리고 예전에 북마크를 해둔 사용자는 404 에러를 접하게 됨
그래서 리다이렉션을 설정해 주면 좋음.
301(permanent) 리다이렉션
시간이 많이 흘러, 과거 북마크를 해둔 유저들이 과거 URL로 접근하지 않는 것이 확실해지면 nginx의 redirect 설정을 제거하는 것도 고려 가능.
permanent 키워드를 사용하지 않으면 302(temporary) 리다이렉션을 하게 된다고 하는데 상태코드는 304(not modified) 또는 301이 됨..
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 안에서 사용할 수 있는 변수들
content_length
$host
references
contents
대부분의 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 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 파티 모듈 다운받아서 설정해야 하는듯?
사용법 잘 모름