Nginx 설치 및 세팅

이형욱·2025년 4월 6일

Nginx 설치


  1. Nginx 설치

    sudo apt-get install nginx
  1. Nginx 상태 확인

    sudo systemctl status nginx

SSL 인증서 받기(Let’s Encrypt)


  1. Certbot 설치

    sudo apt update
    sudo apt install certbot python3-certbot-nginx -y
  1. Nginx 파일 생성

    /etc/nginx/sites-available/ 경로 아래에 default 파일을 수정하거나 파일을 생성한다.

    cp default example-server.com

    example-server.com 파일 수정.

    server {
        listen 80;
        server_name example-server.com www.example-server.com;
    
        location / {
            proxy_pass http://localhost:port;  # 프록시할 포트번호
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection keep-alive;
            proxy_set_header Host $host;
            proxy_cache_bypass $http_upgrade;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }
  2. /etc/nginx/sites-available 의 작성한 파일을 /etc/nginx/sites-enabled에 심볼릭 링크한다.

    sudo ln -s /etc/nginx/sites-available/example-server.com /etc/nginx/sites-enabled/
  3. 적용 확인

    sudo nginx -t # 문법 확인
    sudo systemctl reload nginx # 설정 반영
  1. 주의할 점

    기존의 default 파일과 새로 생성한 파일의 포트가 충돌나지 않도록 해야한다. 이를 위해 /etc/nginx/sites-enabled에 활성화되어 있는 default파일에 대한 심볼릭 링크만 제거한다.

    sudo rm -rf /etc/nginx/sites-enabled/default

HTTPS 적용


  1. DNS에 연결한 후, ssh 접속 등으로 정상적으로 연결되었는지 확인한다.

  2. certbot을 이용하여 HTTPS 적용

    sudo certbot --nginx -d example-server.com -d www.example-server.com -d api.example-server.com
  3. HTTPS 적용 확인.

    다음과 같은 방식으로 HTTPS를 위한 443 포트용 server 블록이 자동으로 추가된다.

    server {
        listen 443 ssl;
        server_name example-server.com www.example-server.com;
    
        ssl_certificate /etc/letsencrypt/live/example-server.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/example-server.com/privkey.pem;
        include /etc/letsencrypt/options-ssl-nginx.conf;
        ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
    
        location / {
            proxy_pass http://localhost:port;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection keep-alive;
            proxy_set_header Host $host;
            proxy_cache_bypass $http_upgrade;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }
    
    # HTTP 접속 시 HTTPS로 리디렉션
    server {
        listen 80;
        server_name example-server.com www.example-server.com;
        return 301 https://$host$request_uri;
    }
  1. 전체 코드

    # Web FrontEnd HTTP -> HTTPS 리다이렉션
    server {
        listen 80;
        server_name example-server.com www.example-server.com;
        return 301 https://example-server.com$request_uri;
    }
    # BackEnd API Server HTTP -> HTTPS 리다이렉션
    server {
        listen 80;
        server_name api.example-server.com;
        return 301 https://api.example-server.com$request_uri;
    }
    
    # Web FrontEnd HTTPS listen 및 proxy
    server {
        listen 443 ssl;
        server_name example-server.com www.example-server.com;
    
        ssl_certificate /etc/letsencrypt/live/example-server.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/example-server.com/privkey.pem;
        include /etc/letsencrypt/options-ssl-nginx.conf;
        ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
    
        location / {
            proxy_pass http://localhost:3000;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection keep-alive;
            proxy_set_header Host $host;
            proxy_cache_bypass $http_upgrade;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }
    
    # BackEnd API Server HTTPS listen 및 proxy
    server {
        listen 443 ssl;
        server_name api.example-server.com;
    
        ssl_certificate /etc/letsencrypt/live/example-server.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/example-server.com/privkey.pem;
        include /etc/letsencrypt/options-ssl-nginx.conf;
        ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
    
        location / {
            proxy_pass http://localhost:8080;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection keep-alive;
            proxy_set_header Host $host;
            proxy_cache_bypass $http_upgrade;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }
profile
바나나는 하드디스크보다 따듯하다.

0개의 댓글