
Nginx는 환경 설정 파일로 여러 가지 값을 지정해 Nginx가 실행할 수 있도록 지원한다.
설정 파일은 논리적을 작성된 지시문 목록이며, 독립된 규칙을 가진다.
또한 Nginx에는 다양한 모듈이 존재하고 설정파일의 지시문에 따라 내부에 정의된 모듈을 사용한다.
# 2.1.1 Core 모듈 설정(= Nginx app 설정)
user nginx; ## NGINX 프로세스가 실행되는 권한
worker_processes 1; ## 사용할 워커 프로세스 수
error_log /var/log/nginx/error.log error; ## 에러 로그 위치
pid /var/run/nginx.pid; ## nginx pid 정보 위치
# 2.1.2 최상위 블록(컨텍스트) 영역
# 2.1.3 events 블록 - 네트워크 동작(처리)에 대한 설정
events {
## 하나의 프로세스가 처리할 수 있는 최대 커넥션 수 === 최대 접속자 수
worker_connections 1024;
}
# 2.1.4 http 블록 - http 웹서버가 수행해야하는 동작 설정
http {
## http 서버에서 사용할 설정 파일
include /etc/nginx/mime.types; ## 허용할 mime 타입 리스트
default_type application/octet-stream; ## 기본 mime 타입
## http 서버로 들어오는 트래픽 로그
access_log /var/log/nginx/access.log main;
## 헤더에 NGINX 버전을 숨김 설정 (보안상 설정 권장)
server_tokens off;
## http keep-alive 헤더 설정(접속 시 커넥션 유지 시간)
keepalive_timeout 65;
# 2.1.5 server 블록 - 가상 호스트 서버 동작 설정
## 동작요약: http + root(/)요청시 설정한 정적파일 호스팅 한다.
server {
listen 80; ## 가상호스트 포트
server_name ${host name}; ## 가상 소스트 이름(도메인)
server_tokens off;
# 2.1.6 location 블록 - url path에 대한 동작 설정
## root(/)로 요청이 온 경우 동작 설정
location / {
root /usr/share/nginx/html/; ## 해당 경로의
index index.html index.htm; ## 일치하는 파일을 호스팅한다.
try_files $uri $uri/ /index.html =404; ## 404 에러 페이지 정의
}
}
...
}
...
Nginx app에 대한 설정을 하는 영역으로 Core 모듈을 사용하며 블록 없이 최상단에 작성한다.
주로 app이 사용할 프로세스에 대한 설정이나 로그 파일에 대한 설정을 한다.
설정파일에서 최상위 블록은 컨텍스트라 불리기도 한다.
최상위 블록은 서로 다른 트래픽 유형에 지시문들을 그룹화한다.
events 블록 - 네트워크 동작에 대한 설정주로 네트워크 동작에 관련된 설정하는 영역으로, event 모듈을 사용한다.
worker_connections 1024;의미는 “프로세스당 처리할 커넥션 수”를 의미한다. worker_connections 설정은 하드웨어(RAM)에 따라서 조절하여 사용한다. http 블록 - http 웹서버가 수행해야하는 동작 설정웹 서버에 대한 동작을 설정하는 영역이다.
http 블록은 아래 설명할 server, location 블록의 부모 블록이다. http 블록에서 설정된 값은 하위 블록에게 상속된다. server 블록 - 가상 호스트 서버 동작 설정블록 하나당 하나의 웹 서버를 설정하는데 사용한다.
location 블록 - 경로(URL)에 대한 동작 설정특정 URL을 처리하는 방법을 정의한다.
nginx.conf
mime.types
fastcgi.conf
proxy.conf
sites.conf
먼저 호스트(Host)는 네트워크에 오픈된 하나의 물리적인 컴퓨터를 의미한다.
일반적으로 말하는 서버가 호스트 서버를 의미한다.
가상 호스트(Virtual Host)는 한대의 컴퓨터로 마치 여러 대의 호스트 서버가 존재하는 것 처럼
동작시키는 기술이다.

위 그림은 가상 호스트를 설명하는 예시이다.
그림 처럼 1.226.82.52 ip를 사용하는 1개의 호스트 서버가 있다.
1개의 호스트 서버에 가상 호스트 기술을 적용하여,
각각 engin.net, deving.net 도메인을 가진 가상 호스트로 만들었다.
즉, 한 대의 호스트 서버를 마지 두 대의 호스트 서버처럼 만든 것이다.
CGI는 Common Gateway Interface약자로 웹서버와 외부 프로그램을 연결해 주는 표준 방법이다.
초기 웹은 HTML과 이미지를 전달하는 용도로 사용되었다.
하지만 웹에 대한 수요가 증가함에 따라서 정적인 HTML만 사용하기에는 한계가 생겼다.
이를 극복하기 위해서 등장한 기술이 CGI이다.
CGI는 웹 서버로 요청이 들어 올 때 그 요청이 웹 서버가 처리할 수 없는 정보라면,
그 정보를 처리할 수 있는 외부 프로그램를 호출(프로세스 생성)해서 전달한다.
그리고 외부 프로그램이 처리한 결과를 웹서버가 다시 받아서 클라이언트에게 응답한다.
CGI vs WAS
CGI를 개선한 프로그램이다.
CGI는 하나의 요청에 하나의 프로세스를 생성한다.
CGI는 프로세스를 생성, 사용, 삭제 과정에서 많은 부하가 발생하는 한계가 있다.
이러한 한계를 개선하기 위해 등장한 것이 FastCGI이다.
FastCGI는 요청이 있을 때마다 프로세스를 만드는 것이 아닌 1개의 프로세스만 사용한다.
이러한 방법으로 프로세스를 생성하고 삭제하는데 생기는 부하를 해결하였다.
uWSGI란 WSGI라는 규칙을 따라서 만들어진 소프트웨어이며 정적인 웹 서버(Apache / Nginx)와 python으로 작성된 Web Framework(Flask / Django) 사이의 통신을 도와주는 역할을 한다.
FastCGI와 유사한 게이트웨이 인터페이스로 FastCGI를 조금더 편하게 사용하기 위해 만들었다.
(FastCGI 보다 구문 분석이 조금더 쉽게 설계하였다)
오픈소스로 분산 메모리 캐싱 시스템이다.
Redis와 비슷한 용도로 사용된다.