Nginx 설치 및 SSL 인증 적용

Nginx 설치 및 SSL 인증 적용
Photo by Christopher Gower / Unsplash

On this page

Nginx 웹 서버를 설치하고, Let's Encrypt를 통해 SSL 인증서를 발급받아 HTTPS 연결을 설정하는 과정을 단계별로 설명합니다.

1. Nginx 설치

Nginx는 가벼운 웹 서버 소프트웨어로, 여러 종류의 요청을 효율적으로 처리할 수 있습니다. 아래 지침을 따라 Nginx를 설치하십시오.

Ubuntu/Debian 시스템

sudo apt update
sudo apt install nginx
sudo systemctl start nginx
sudo systemctl enable nginx

CentOS/RHEL 시스템

sudo yum install nginx
sudo systemctl start nginx
sudo systemctl enable nginx

2. SSL 인증서 발급 및 설정

SSL 인증서를 통해 웹사이트의 보안을 강화할 수 있습니다. Let's Encrypt에서 제공하는 무료 SSL 인증서를 사용하면 경제적입니다.

Certbot 설치

# Ubuntu/Debian
sudo apt install certbot python3-certbot-nginx

# CentOS/RHEL
sudo yum install certbot python3-certbot-nginx

인증서 발급

sudo certbot --nginx -d yourdomain.com
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com

이 과정은 자동으로 도메인의 소유권을 검증하고, 인증서를 발급받아 Nginx에 설정합니다.

3. Nginx 리버스 프록시 설정

Nginx를 리버스 프록시로 설정하여 온프레미스 서버로 트래픽을 전달하도록 설정합니다.

# /etc/nginx/sites-available/yourdomain.com

server {
    listen 80;
    server_name yourdomain.com;
    return 301 https://$host$request_uri;  # 모든 HTTP 요청을 HTTPS로 리다이렉트
    
    # HTTP 요청을 HTTPS로 강제 리다이렉트 #메모
    location / {
        return 301 https://$server_name$request_uri;
    }
}

server {
    listen 443 ssl;
    server_name yourdomain.com;

    ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
    ssl_protocols TLSv1.2 TLSv1.3;  # 보안 프로토콜 설정
    ssl_prefer_server_ciphers on;

    # WebSocket 경로
    location /_stcore/stream {
        proxy_pass http://...:...;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
    
    location / {
        proxy_pass http://your_backend_ip:port;  # 온프레미스 서버로 요청 전달
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

사이트 활성화
생성한 설정 파일을 활성화하기 위해, /etc/nginx/sites-enabled/ 디렉터리에 심볼릭 링크를 생성합니다:

sudo ln -s /etc/nginx/sites-available/yourdomain.com /etc/nginx/sites-enabled/

4. 구성 테스트 및 Nginx 재시작

수정된 설정이 올바른지 검사하고, Nginx 서버를 재시작합니다.

sudo nginx -t  # 구성 테스트
sudo systemctl restart nginx  # Nginx 재시작

이제 설정이 완료되었습니다. HTTPS를 통해 보안 연결이 가능하고, 모든 트래픽은 안전하게 온프레미스 서버로 전달됩니다.

주의사항

  • 도메인이 올바르게 DNS에 등록되어 있고, 해당 서버의 IP 주소를 가리켜야 합니다.
  • 방화벽 설정이나 다른 보안 구성으로 인해 서버가 외부에서 접근 불가능할 수 있으니, 이를 확인하고 조정해야 합니다.


1. Nginx 구성 파일 확인

먼저, Nginx의 메인 구성 파일인 **nginx.conf**를 확인해 보세요. 이 파일에서 include 지시어가 /etc/nginx/sites-enabled/ 디렉토리를 참조하고 있는지 확인합니다.

bashCopy code
sudo nano /etc/nginx/nginx.conf

이 파일을 열어서 다음과 같은 줄이 있는지 확인하세요.

nginxCopy code
include /etc/nginx/sites-enabled/*;

2. sites-enabled 디렉토리 확인

/etc/nginx/sites-enabled/ 디렉토리 내의 심볼릭 링크들을 확인합니다. default 파일 링크가 남아있지 않은지 확인하고, 필요한 경우 삭제합니다.

bashCopy code
ls -l /etc/nginx/sites-enabled/
sudo rm /etc/nginx/sites-enabled/default

3. keun.me 구성 파일 확인 및 활성화

**keun.me**에 대한 구성 파일이 **/etc/nginx/sites-available/**에 존재하는지 확인하고, 이를 /etc/nginx/sites-enabled/ 디렉토리로 심볼릭 링크를 생성해 활성화합니다.

bashCopy code
sudo ln -s /etc/nginx/sites-available/keun.me /etc/nginx/sites-enabled/keun.me

4. Nginx 구성 검사

구성이 정확히 되었는지 검사합니다. 오류가 없어야 합니다.

bashCopy code
sudo nginx -t

5. Nginx 재시작

구성 검사에서 오류가 없으면 Nginx를 재시작합니다.

bashCopy code
sudo systemctl restart nginx


Sample - conf

server {
    listen 80;
    server_name keun.me;
    return 301 https://$host$request_uri;  # 모든 HTTP 요청을 HTTPS로 리다이렉트
}

server {
    listen 443 ssl;
    server_name keun.me;

    ssl_certificate /etc/letsencrypt/live/keun.me/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/keun.me/privkey.pem;

    client_max_body_size 10M; # 업로드 파일용량

    location / {
        proxy_pass http://localhost:2368;  # 온프레미스 서버로 요청 전달
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

Subscribe to Keun's Story newsletter and stay updated.

Don't miss anything. Get all the latest posts delivered straight to your inbox. It's free!
Great! Check your inbox and click the link to confirm your subscription.
Error! Please enter a valid email address!