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 버전
- 윈도우 설치
- https://nginx.org/en/download.html 에서 window용 stable버전 다운로드
- 원하는 경로에 압축해제
- nginx.exe 더블클릭 시 실행됨 (브라우저로 http:localhost를 열면 Welcome to 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
'Python > Web' 카테고리의 다른 글
FastAPI 개발자가 직접 개발한 FastAPI backend 프로젝트 구조 (0) | 2024.03.03 |
---|---|
WSGI와 ASGI 단순 비교 (0) | 2024.02.28 |
FastAPI 비동기 처리 (1) | 2024.02.26 |
FastAPI async 비동기 동시 처리 (1) | 2024.02.26 |
[windows] nginx 프록시 설정 방법 (0) | 2022.11.01 |