Nginx는 웹 서버, 리버스 프록시, 로드 밸런서 및 HTTP 캐시 기능을 제공하는 오픈 소스 소프트웨어입니다. Nginx는 높은 성능과 낮은 리소스 사용량으로 유명하며, 웹 트래픽을 효율적으로 처리할 수 있습니다.

  1. 웹 서버:

    <aside> 💡 웰드코리아는 HTML, CSS, JS 이미지는 클라이언트에서 빌드된 파일을 서빙합니다.

    </aside>

    <aside> 💡 Static(기량검증 이미지, 온라인 동영상 컨텐츠)은 Google Cloud Storage를 통하여 전달되고, Asset(배너 이미지, favicon 이미지 등)은 nginx가 전달합니다.

    </aside>

  2. 리버스 프록시:

    <aside> 💡 /api로 시작하는 요청은 메인 웹서버로 보냅니다.

    </aside>

  3. 로드 밸런싱:

  4. HTTP 캐시:

  5. SSL/TLS 종단:

    <aside> 💡 HTTPS 인증은 Letsencrypt를 이용하여 인증합니다. 이때, 3개월마다 갱신해줘야합니다.

    </aside>

Nginx Conf 파일

user nobody nogroup;
worker_processes auto;
pid /run/nginx.pid;

events {
        worker_connections 768;
        # multi_accept on;
}

http {
        ##
        # Basic Settings
        ##

        sendfile on;
        tcp_nopush on;
        tcp_nodelay on;
        keepalive_timeout 65;
        types_hash_max_size 2048;
        # server_tokens off;

        # server_names_hash_bucket_size 64;
        # server_name_in_redirect off;

        include /etc/nginx/mime.types;
        default_type application/octet-stream;

        ##
        # SSL Settings
        ##

        ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
        ssl_prefer_server_ciphers on;

        ##
        # Logging Settings
        ##

        access_log /var/log/nginx/access.log;
        error_log /var/log/nginx/error.log;

        ##
        # Gzip Settings
        ##

        gzip on;
        gzip_min_length 256;
        gzip_types
          application/json
          application/javascript
          text/javascript
          text/css
          text/plain;

        # Allow maximum 110M size reqeust (for uploading files).
        client_max_body_size 110M;

        # To allow POST on static pages
        error_page  405     =200 $uri;

        server {
          listen 80;
          server_name weldkorea.com www.weldkorea.com;
          server_tokens off;

          location /.well-known/acme-challenge/ {
            root /var/www/certbot;
          }

          location / {
            return 301 https://$host$request_uri;
          }
        }

        server {
          listen 443 ssl http2;
          server_name weldkorea.com;
          server_tokens off;

          root /client/build;

          # For SSL
          ssl_certificate /etc/letsencrypt/live/weldkorea.com/fullchain.pem;
          ssl_certificate_key /etc/letsencrypt/live/weldkorea.com/privkey.pem;
          include /etc/letsencrypt/options-ssl-nginx.conf;
          ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

          location /api {
             proxy_set_header X-Real-IP $remote_addr;
             proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
             proxy_set_header Host $http_host;
             proxy_set_header X-NginX-Proxy true;

             proxy_pass <http://web:8000/api>;
             proxy_redirect off;
          }

          # Longer cache duration for images and pdf.
          location ~* "/static.*(png|jpe?g|webp|svg|pdf)$" {
             root /;
             expires 30d;
          }

          location ~* "/assets.*(png|jpe?g|webp|svg|pdf)$" {
             root /client/build;
             expires 30d;
          }

          location /static {
             root /;
             expires 1d;
          }

          location / {
             try_files $uri $uri/ /index.html;
          }
        }
}