IT/Server

[WebServer] Nginx란?

음료요정 2021. 4. 21. 10:55

 

 

 

- Nginx란 ? 

Nginx란 웹 서버 소프트웨어이다.

트래픽이 많은 웹 사이트를 위해 가벼움과 높은 성능을 목표로 만들어진 경량 웹 서버이다.

클라이언트의 요청을 받았을 때 요청에 맞는 정적파일을 응답해주는 HTTP Web Server 이며,

Reverse Proxy Server로 활용하여 WAS서버의 부하를 줄일 수 있는 로드밸런서로 활용되기도 한다.

트래픽이 많은 웹 사이트를 위해 네트워크 확장성을 주 목적으로 설계한 

Nginx는 아파치를 대체할 수 있을 차세대 HTTP 서버로 평가 받는다

웹 사이트의 전체 속도를 향상 시키기 위한 프리오픈 솔루션으로, 기존 웹서버 앞에 설치해 사용할수 있다.

 

-  특징

Nginx는 하나의 Master Process에 다수의 Worker Process로 구성되어 실행된다. 

비동기 Event-Driven 구조로 동작하여 한개의 Master Process는 설정파일을 읽고, 모든 요청을 이벤트 기반의 Worker Process에 분배해 처리한다. 새로운 요청이 들어와도 새로운 프로세스와 쓰레드를 생성하지않기 때문에 비용이 많이 존재하지않고, 적은 자원으로 효율적인 운용이 가능하다. Nginx는 개발의 모든 목적이 높은 성능에 맞춰져 있다.

 

  

Worker Process의 갯수는 설정파일에서 정의된다.

환경설정을 바꾸고나서 서버 데몬을 재시작 할 필요없고 reload 만 하면 된다.

 

- Apache와의 비교

Apache Nginx
쓰레드/ 프로세스 기반 구조 비동기 Event-Driven 기반 구조
사용자가 많은 경우 메모리, CPU 낭비가 심함 사용자가 많아도 적은 메모리 사용으로 효과적으로 처리 가능한 구조로 CPU사이클을 절약함
멀티 프로세스 - 멀티 쓰레드 방식 멀티 프로세스 - 싱글 쓰레드 방식

 

넷 크래프트에 따르면 최근에는 Apache서버 대신 Nginx를 많이 쓰고있는 추세라고 한다

출처 : news.netcraft.com/

 

 

 

- 설치 방법

설치는 다양한 방법으로 할 수 있다.

 

1. 패키지 매니저를 활용하여 설치, 간단한 명령어로 설치가 가능하다  .

# debian 계열 (ubuntu..)
sudo apt-get install nginx

# redhat 계열 (centos..)
sudo yum install nginx

 

2. 압축파일을 내려받아 푸는 방법도 있다.

NGINX_VERSION=1.14.2 # 버전은 선택 항목
wget -q http://nginx.org/download/nginx-${NGINX_VERSION}.tar.gz
tar xvzf nginx-${NGINX_VERSION}.tar.gz

#configure 후 make필요 

 

 

 

- Nginx 설정 ( 설정하면서 계속 추가할 예정 ) 

1. 주요 설정파일 : 

 Nginx의 메인 설정 파일 경로는 /etc/nginx/nginx.conf 이다.

 이미 설치되어있는 경로가 다르게 되어있다면 find 명령어로 간단히 찾을수있다 ( find / -name nginx.conf )

 

 - nginx.conf : nginx 설정 핵심 파일

 - conf.d 폴더 :  nginx.conf에서 include로 불러오는 conf 파일 저장 폴더

 

 

2. 지시어 블록 ( directives )

Nginx 모듈의 동작은 configuration파일에 있는 지시어에 의해 제어된다.

지시어는 두가지 종류가 있는데, simple directive, block directive 가 있다.

simple directive는 이름, 값으로 설정되며 세미콜론으로 끝나고

block directive는 블록 구조 ("{", "}")로 감싼 형태의 지시어이다. 

 

3.  conf 파일구조

# nginx.conf 설정파일 예시 

user nginx-user;      # worker 프로세스를 실행할 사용자 설정
worker_process auto;  # 실행할 worker 프로세스 설정, 보통 서버 장착되어있는 코어 수 만큼 할당 

error_log /var/log/nginx/access.log main; # 오류로그를 남길 파일 경로 지정
pid /var/run/nginx.pid;                   # nginx 마스터 프로세스 ID를 저장할 경로 지정


# 접속 처리에 관한 설정
events {
 worker_connections 1024;     # 동시에 처리할수 있는 접속자 수
 accept_mutex on;             # LISTEN 소켓을 오픈하기위한 accetp 뮤텍스의 사용/해제 설정
 accetp_mutex_delay 500ms;    # 자원 획득 재시도 전 작업자 프로세스가 기다려야하는 시간 설정. 윗줄과 연관

}

#웹, 프록시 관련 서버 설정
http {
 
 # 엑세스 로그 남길 파일 경로 지정
 access_log /var/log/nginx/access.log main;
 
 # 로그 포맷 설정 
  log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                                '$status $body_bytes_sent "$http_referer" '
                                '"$http_user_agent" $request_time $upstream_response_time $sent_http_result_code';

 # 기본 설정들
 sendfile on;                 # sendfile api를 사용할지 말지 설정
 tcp_nopush off; 
 tcp_nodelay on;
 keepalive_timeout 65;        # 접속시 커넥션 몇고나 유지할지 설정
 type_hash_max_size 2048;
 server_tokens off;           # nginx 버전을 숨길 수 있다. 숨기는게 일반적
 
 # conf 파일을 읽어들임
 include /etc/nginx/conf.d/*.conf; #특정 파일을 포함시킴. 지시어가 있는 위치에 파일내용이 삽입된다.
 

}

 

block 설명
http HTTP와 관련된 모듈의 지시어를 정의하는 블록이다
http, server, location 블록의 계층구조를 가지고있다.
http 블록은 server 블록의 기본값이 되고, server 블록의 내용은 location 블록의 기본값이 된다. 상위 블록에서 선선된 지시어를 하위 블록에서 다시 선언하면 상위 지시어는 무시된다.
server server블록은 하나의 호스트를 선언하는데 사용한다. 
server블록은 한개의 location블록을 선언 할수 있다. (?) -> 확인필요 

location 특정 URL을 처리하는 방법을 정의한다.
접근 요청에 따라 다르게 처리하고 싶을 때 사용한다.
events events블록은 접속 처리에 대한 , 네트워크의 작동 환경을 설정하는 지시어를 제공한다.
http, server, location 블록과는 상속 관계를 갖지않는다. 

 

4. Reverse Proxy

Nginx는 리버스 프록시로도 활용이 가능하다. 리버스 프록시란 외부 클라이언트의 서버 접근 시, 중간에서 중개자 역할을 해서 내부서버로 접근을 도와주는 서버이다.

 * 보안 : 리버스 프록시를 활용하면 내부망에 있는 서버의 존재를 숨길 수 있고, 모든 요청이 리버스 프록시를 통해 받아지고 내부서버로 요청을 전달한다.

 * 로드밸런싱 :  리버스 프록시가 각 서버 상태에 따라 부하를 분산시켜 요청을 전달 할 수있다.

http {
 server {
  listen 80;    # default값은 80 port
  location / {
   proxy_pass https://127.0.0.1:8081;
  }
 }
}

 

5. 지시어 약자 

1. 파일크기

 지시어 값에서 파일 크기를 지정할 때 약자를 사용하여 표현한다.

- ms    밀리초
- s    초
- m    분
- h    시
- d    일
- w    주
- M    월 (30일)
- y    연 (365일)

2. 변수 

 

- 참고자료

nginx 홈페이지 : nginx.org/en/docs/beginners_guide.html

 

 

Beginner’s Guide

Beginner’s Guide This guide gives a basic introduction to nginx and describes some simple tasks that can be done with it. It is supposed that nginx is already installed on the reader’s machine. If it is not, see the Installing nginx page. This guide de

nginx.org

참고 사이트 : 12bme.tistory.com/366

 

 

 

 

'IT > Server' 카테고리의 다른 글

[Pinpoint] Pinpoint란?  (0) 2021.06.10
[JPA]JPA란?  (0) 2021.05.27
[Spring] @RequestMapping-> @GetMapping , @PostMapping  (0) 2021.05.12
[HTTP] Error Code 정리 ( 정리중 )  (0) 2021.04.21
[WebServer] Nginx 디폴트 에러페이지 설정하기  (0) 2021.04.21