728x90
반응형
디렉토리 구조
├── conf.d # (디렉토리) nginx.conf에서 불러들일 수 있는 파일을 저장
├── fastcgi.conf # (파일) FastCGI 환경설정 파일
├── fastcgi_params
├── koi-utf
├── koi-win
├── mime.types
├── nginx.conf # 접속자 수, 동작 프로세스 수 등 퍼포먼스에 관한 설정들
├── proxy_params
├── scgi_params
├── sites-available # 비활성화된 사이트들의 설정 파일들이 위치한다.
│ └── default
├── sites-enabled # 활성화된 사이트들의 설정 파일들이 위치한다. 존재하지 않은 경우에는 디렉토리를 직접 만들 수도 있다.
│ └── default -> /etc/nginx/sites-available/default ex) sudo ln -s /opt/tomcat/apache-tomcat-8.5.61 /opt/tomcat/latest
├── snippets
│ ├── fastcgi-php.conf
│ └── snakeoil.conf
├── uwsgi_params
└── win-utf
주요 파일 위치
NGINX의 설정 관련 파일들의 위치: /etc/nginx/
NGINX의 주 설정 파일 위치: /etc/nginx/nginx.conf
NGINX의 server파일 위치: /etc/nginx/conf.d/
기본 설정
설정 파일 계층 구조
Core 모듈 설정
- 지시자 설정 파일 최상단에 위치
- nginx의 기본적인 동작 방식을 정의
- 여기서 사용되는 지시어들은 다른 곳에서 사용되지 않는다.
- 참고 : 코어모듈 지시어 사전
http 블록
- server, location의 루트 블록
- 여기서 설정된 값을 하위 블록들은 상속. http 블록은 여러개를 사용할 수 있지만 관리상의 이슈로 한번만 사용하는 것을 권장
server 블록
- 하나의 웹사이트를 선언하는데 사용
- 가상 호스팅(Virtual Host)의 개념
- 하나의 서버로 http://opentutorials.org 과 http://egoing.net 을 동시에 운영하고 싶은 경우 사용할 수 있는 방법
location 블록
- server 블록 안에 등장하면서 특정 URL을 처리하는 방법
- 이를테면 http://honey/1 과 http://honey/api/1 로 접근하는 요청을 다르게 처리하고 싶을 때 사용
events 블록
- 주로 네트워크의 동작방법과 관련된 설정
- 이벤트 블록의 지시어들은 이벤트 블록에서만 사용할 수 있고, http, server, location와는 상속관계를 갖지 않는다.
- 참고 : 이벤트 모듈 지시어 사전
nginx.conf
user user; # 유저 자격 증명 (default : www-data)
# nginx는 마스터(master)와 워커(worker) 프로세스로 나뉜다.
# 워커 프로세스가 실질적인 웹서버 역할을 수행한다.
# user 지시어는 워커 프로세스의 권한을 지정한다.
# 워커 프로세스를 악의적 사용자가 제어하면 해당 머신을 최고 사용자의 권한으로
# 원격제어하는 것이기 때문에 위험
worker_processes auto; # NGINX 프로세스 실행 가능 수 - 실질적 웹서버 역할
pid /run/nginx.pid; # NGINX 마스터 프로세스 ID 정보
include /etc/nginx/modules-enabled/*.conf;
events {
worker_connections 768; # NGINX의 특징인 비동기 이벤트 처리 방식에 대한 옵션 설정
# 하나의 프로세스가 처리할 수 있는 커넥션의 수
# 최대 접속자수 = worker_processes X worket_connections
# multi_accept on; # (default : false)
}
http {
##
# Basic Settings
##
sendfile on; # sendfile 시스템 콜을 사용하여 파일을 전송하도록 하는 것
# 파일을 전송할 때 파일 데이터를 읽어와서 메모리에 적재하지 않고
# 직접 네트워크 소켓으로 전송하는 기술
tcp_nopush on; # 여러 개의 작은 데이터 조각을 하나의 TCP 패킷으로 결합하여
# 전송하는 기술
tcp_nodelay on; # 작은 데이터 전송 시에 발생하는 오버헤드를 줄이기 위해 사용
keepalive_timeout 65; # 접속시 커넥션을 몇 초동안 유지할지에 대한 설정값
# 이 값이 높으면 불필요한 커넥션(접속)을 유지하기 때문에
# 낮은값 또는 0을 권장 (default : 10)
types_hash_max_size 2048; # 메모리 내에서 사용할 수 있는 해시 테이블의 크기
server_tokens off; # 보안 정책 - 서버 nginx 버전을 숨긴다.
# server_names_hash_bucket_size 64;
# server_name_in_redirect off;
include /etc/nginx/mime.types; # 보안 구문
default_type application/octet-stream;
# 서버가 클라이언트에게 전송할 파일의
# MIME 타입(Multipurpose Internet Mail Extensions type)을 지정
##
# SSL Settings
##
# ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
ssl_protocols TLSv1.3; # 보안상 가장 좋은 TLS 1.3버전 사용
ssl_prefer_server_ciphers on; # 서버가 클라이언트에게 제안하는 암호화 알고리즘
# 목록과 클라이언트가 선택한 알고리즘 중에서 서버가 선호하는 것을 선택하도록 하는 것
disable_symlinks on; # 심볼릭링크 사용 금지
##
# Logging Settings
##
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; # 승인 로그
error_log /var/log/nginx/error.log; # 에러 로그
##
# Gzip Settings
##
gzip on; # gzip 사용
# 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; # /etc/nginx/conf.d/*.conf 파일들을 구성에 포함
# server { location } 부분
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;
# }
#}
🔖 설정 파일 내용 변경 후 NGINX에 반영하기 위한 구문 sudo service nginx reload;
restart는 권장되지 않음.
server {
listen 8080; # 포트 리스닝 - 웹사이트가 바라보는 포트
client_max_body_size 5M; # POST 요청의 본문 크기가 5MB를 초과하면 Nginx가 해당 요청을 거부
location / { # URI 경로가 /인 요청에 대한 설정을 정의
alias /usr/share/nginx/html/; # 해당 location의 루트를 지정된 경로로 설정
try_files $uri $uri/ /index.html; # 파일이나 디렉토리를 찾는 방법 시도 지시
# 먼저 $uri에 해당하는 파일을 찾고,
# 그 다음 $uri/에 해당하는 디렉토리를 찾습니다. 찾지 못하면 /index.html을 반환
autoindex off; # 디렉토리 내의 파일 목록을 자동으로 생성하지 않도록 설정
# 디렉토리 내용을 브라우저에 노출X
limit_except GET POST { # HTTP 메서드를 제한하는데 사용
deny all; # GET과 POST 메서드를 허용하고,
} # 다른 모든 메서드는 거부
}
}
반응형