nginx 개념 & nginx.conf 설정

bakjinho·2024년 11월 26일

1. nginx의 개념

nginx는 웹서버로 중 하나로, 가볍고 여러 요청을 한 번에 처리할 수 있는 장점을 가지고 있다.

동작이 가볍고 단순하여 동시접속에 특화되어 있다는 특징을 가지고 있다.

nginx는 Event Driven(비동기처리방식)이고 요청이 들어오면 어떤 동작을 해야하는지 알려주고 다른 요청을 처리하는 방식이다. 모든 입출력을 Event Listener로 전달하기 때문에 1개의 프로세스로 보다 빠른 작업이 가능하다.

2. 웹서버의 역할

  1. 웹 서버의 역할은 HTML, CSS, Javascript, 이미지와 같은 정적인 정보를 사용자에게 전달하는 것이다.
  2. Reverse Proxy역할을 하기도 한다.
    Reverse Proxy는 내부망의 서버 앞쪽에서 요청을 처리한다. Reverse Proxy의 장점은 “보안”에 있다. WAS(Wep Application Server)는 대부분 DB서버와 연결되어 있기 때문에 보안에 취약해진다. 이럴 때, Reverse Proxy를 사용하면 웹 서버가 WAS와 통신을 해서 결과를 클라이언트에 제공하는 방식으로 서비스하게 된다.

3. conf 설정

nginx의 conf 옵션에 대해서 알아보겠다.

user  nginx; # 프로세스의 실행되는 권한. 보안상 root를 사용하지 않습니다.
worker_processes  1;
error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;
events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    
    upstream docker-server {
        server server:8080;
    }
    server {
        listen 80;
        server_name localhost;

        location / {
            root /usr/share/nginx/html;
            index index.html index.htm;
            try_files $uri $uri/ /index.html =404;
        }
        location /api {
            proxy_pass         http://docker-server;
            proxy_redirect     off;
            proxy_set_header   Host $host;
            proxy_set_header   X-Real-IP $remote_addr;
            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        }
        location /socket {
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            proxy_set_header Host $host;
            proxy_pass http://docker-server;
        }
    }
    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;
server_tokens     off;
    keepalive_timeout  65;
    include /etc/nginx/conf.d/*.conf;
}
  1. worker_processes
    워커 프로세스를 몇개 생성할 것인지 지정하는 것이다. 보통 ‘auto’로 사용한다.
  2. error_log
    로그 레벨을 설정하는 지시어이다. [ debug | info | notice | warn | error | crit ] 같은 종류가 있다.
  3. pid
    nginx 마스터 프로세스 id 정보가 저장된다.

events 블록

  1. worker_connections
    하나의 프로세스가 처리할 수 있는 커넥션의 개수(클라이언트, 백엔드 서버와 연결 포함)

http 블록

  1. include
    옵션 항목을 설정해둔 파일의 경로를 지정하는데 보통 파일 확장명과 MIME 타입 목록을 지정한다.
  2. defualt_type
    옥텟 스트림 기반의 http를 사용한다는 지시어
  3. upstream 블록
    orgin 서버라고도 하는데, WAS를 의미하며 nginx는 downstream에 해당한다. nginx와 연결한 WAS를 지정하는데 사용된다. 하위에 있는 sever 지시어는 연결할 WAS의 [host주소]:[포트]를 지정한다.
  4. server 블록
    하나의 웹 사이트를 선언하는데 사용된다. sever 블록이 여러 개면 한개의 호스트로 여러 웹사이트를 서빙할 수 있다. → 가상 호스트
  5. listen
    웹 사이트가 바라보는 포트를 의미한다.
  6. server_name
    클라이언트가 접속하는 서버(도메인)와 실제로 들어온 request의 header에 명시된 값이 일치하는지 확인해서 sever를 분기해준다.
  7. location 블록
    server 블록 안에서 특정 웹 사이트의 url을 처리하는데 사용한다. 내부의 root는 웹사이트가 바라보는 root 폴더의 경로를 의미한다.
  8. sendfile
    웹 서버에서 사용하는 기능으로 정적 파일을 효율적으로 전송하기 위해 사용하는 시스템 호출이다.
  9. server_tokens
    헤더에 nginx 버전을 숨기는 기능을 한다. 보안상 off로 설정하는 권장
  10. keepalive_timeout
    접속 시 커넥션 유지 시간을 지정한다.

참고 : https://narup.tistory.com/209?category=1030141

profile
hello world!

0개의 댓글