NGINX

웹 서버 및 리버스 프록시로 사용되는 고성능 서버 소프트웨어입니다. NGINX는 다양한 운영 체제에서 실행할 수 있으며, 단일 쓰레드, 비동기 이벤트 기반 아키텍처를 사용하여 높은 처리량과 저지연 시간을 보장

  • 정적 파일을 처리
  • WAS 서버에 요청을 보내주는 프록시 기능 수행.
  • 다수의 WAS 서버로 요청을 분배하는 로드밸런서의 역할을 수행
  • SSL or proxy를 통해 보안 강화
  • 캐싱처리

Apache vs NGINX

apache는 각 요청마다 새로운 process를 생성하기 때문에 메모리 사용량이 높아진다. 하지만 다양한 모듈을 추가하여 기능을 확장할 수 있기에 필요에 따라 소프트웨어 선택을 할 필요가 있다.

ApacheNGINX
아키텍처프로세스 기반 아키텍처이벤트 기반 아키텍처
정적 파일 처리동적 콘텐츠에 적합정적 콘텐츠에 적합
성능고트래픽에서 성능이 느림고트래픽에서 빠른 성능
.htaccess 지원여부.htaccess 지원.htaccess 지원 없음
유연성더 유연한 구성덜 유연한 구성
안정성더 성숙하고 안정적상대적으로 새롭고 빠르게 발전
모듈의 다양성더 많은 모듈 사용 가능더 적은 모듈 사용 가능
공통점다양한 운영 체제에서 실행 가능다양한 운영 체제에서 실행 가능
Apache 스레드 방식
Nginx Event-driven 방식

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 디렉토리에 있는 심볼릭 링크를 통해 활성화됩니다. 이를 통해 웹 서버가 로드하는 가상 호스트 설정을 유연하게 관리

Leave a Comment