웹 서버 및 리버스 프록시로 사용되는 고성능 서버 소프트웨어입니다. NGINX는 다양한 운영 체제에서 실행할 수 있으며, 단일 쓰레드, 비동기 이벤트 기반 아키텍처를 사용하여 높은 처리량과 저지연 시간을 보장
- 정적 파일을 처리
- WAS 서버에 요청을 보내주는 프록시 기능 수행.
- 다수의 WAS 서버로 요청을 분배하는 로드밸런서의 역할을 수행
- SSL or proxy를 통해 보안 강화
- 캐싱처리
Apache vs NGINX
apache는 각 요청마다 새로운 process를 생성하기 때문에 메모리 사용량이 높아진다. 하지만 다양한 모듈을 추가하여 기능을 확장할 수 있기에 필요에 따라 소프트웨어 선택을 할 필요가 있다.
Apache | NGINX | |
아키텍처 | 프로세스 기반 아키텍처 | 이벤트 기반 아키텍처 |
정적 파일 처리 | 동적 콘텐츠에 적합 | 정적 콘텐츠에 적합 |
성능 | 고트래픽에서 성능이 느림 | 고트래픽에서 빠른 성능 |
.htaccess 지원여부 | .htaccess 지원 | .htaccess 지원 없음 |
유연성 | 더 유연한 구성 | 덜 유연한 구성 |
안정성 | 더 성숙하고 안정적 | 상대적으로 새롭고 빠르게 발전 |
모듈의 다양성 | 더 많은 모듈 사용 가능 | 더 적은 모듈 사용 가능 |
공통점 | 다양한 운영 체제에서 실행 가능 | 다양한 운영 체제에서 실행 가능 |


Nginx 디렉토리 구조
- /etc/nginx/ 설정 파일이 저장되는 디렉토리입니다. 여기에는 nginx의 전역 설정 파일과 각 가상 호스트의 설정 파일이 저장됩니다.
- /usr/share/nginx/ nginx에 대한 기본 문서 루트 디렉토리입니다. 이 디렉토리에는 기본 문서 파일 및 기타 자원이 포함됩니다.
- /var/log/nginx/ nginx 로그 파일이 저장되는 디렉토리입니다. 여기에는 error.log, access.log, 및 기타 로그 파일이 저장됩니다.
- /var/lib/nginx/ nginx의 작동 중에 생성되는 임시 파일과 상태 파일이 저장되는 디렉토리입니다.
- /var/cache/nginx/ nginx 캐시 파일이 저장되는 디렉토리입니다. 이 디렉토리는 일반적으로 프록시 서버나 로드 밸런서에서 사용
💡 위 디렉토리 외에도, 사용자가 설정한 가상 호스트의 문서 루트 디렉토리도 디렉토리 구조에 포함될 수 있습니다. 이 디렉토리는 일반적으로 /var/www/ 또는 /srv/www/와 같은 경로에 위치하며, 가상 호스트에 따라 다르게 지정될 수 있습니다.
/etc/nginx/nginx.conf
# Main Block #
#전체적인 설정을 담당하는 블록
#worker_processes, events, http 등의 설정을 포함
user nginx; #nginx 프로세스가 실행될 때 사용할 사용자를 지정
worker_processes auto; #Nginx 워커 프로세스의 수를 지정합니다.
#"auto"로 설정하면 자동으로 프로세스 수를 설정
error_log /var/log/nginx/error.log; #오류 로그 파일 경로를 지정
pid /run/nginx.pid; #PID 경로 지정
worker_rlimit_nofile #하나의 worker 프로세스가 열 수 있는 파일 디스크립터 수를 제한
# Events block ##
#worker_connections 등의 설정을 담고 있으며,
#Nginx 이벤트 처리와 관련된 설정을 포함
events {
worker_connections 1024; #하나의 worker 프로세스가 동시에 처리할 수 있는
#연결 수를 지정기본값 512
multi_accept #여러 연결을 동시에 받아들일지 여부를 지정합니다. 기본값은 off
}
# HTTP block
#가장 중요한 블록, 모든 웹 서버와 관련된 설정을 담고 있다.
#server 블록을 포함하며,
#이 블록에서
#가상 호스트와 프록시 서버, 캐시 서버, 로드 밸런싱 등의 설정이 가능
http {
include /etc/nginx/mime.types; #다른 설정을 로드
default_type application/octet-stream;
server {
listen 80; #서버가 듣게 될 IP 주소와 포트를 지정합니다.
server_name www.example.com; #가상 호스트의 도메인 이름을 지정합니다.
root /var/www/html; #서버에서 제공하는 파일의 루트 디렉토리를 지정합니다.
index inde.html; #인덱스 파일의 이름을 지정합니다.
location / { #서버 블록 내부에서 URL 경로별로 서로 다른 설정을 지정
proxy_pass http://localhost:8000;
}
}
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;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
/etc/nginx/sites-available/default
Nginx에서 가상 호스트를 설정하기 위해 사용되는 파일 중 하나이며 nginx의 전역설정을 하는 nginx.conf와는 다른 설정파일
가상 호스트는 하나의 서버에서 여러 도메인 이름을 사용하여 여러 웹 사이트를 호스팅할 수 있게 해줍니다. 예를 들어, 도메인 이름 example.com과 example.net이 같은 서버에서 호스팅되어야 한다면, Nginx는 가상 호스트를 사용하여 두 도메인 이름에 대한 별도의 설정을 구성
sites-available/default 파일은 기본적으로 Nginx에서 제공하는 기본 가상 호스트 설정 파일입니다. 이 파일을 편집하여 기본 가상 호스트를 구성하거나, 새로운 가상 호스트를 만들 수 있습니다.
만약 새로운 가상 호스트를 추가하려면, sites-available 디렉토리에 새로운 설정 파일을 작성한 다음, 해당 파일을 sites-enabled 디렉토리에 심볼릭 링크로 추가해야 합니다. 이렇게하면 Nginx가 새로운 가상 호스트 설정 파일을 로드하여 도메인 이름을 처리할 수 있습니다.
기본적으로 sites-available 디렉토리에 있는 모든 파일이 sites-enabled 디렉토리에 있는 심볼릭 링크를 통해 활성화됩니다. 이를 통해 웹 서버가 로드하는 가상 호스트 설정을 유연하게 관리