반응형
NginX 설치
sudo apt update
sudo apt install nginx
NginX 커맨드
sudo systemctl start nginx # 시작
sudo systemctl restart nginx # 재시작
sudo systemctl status nginx # 중지
sudo systemctl enable nginx # 부팅 시 자동시작 설정
NginX 설정 파일의 목적
nginx.conf
Nginx의 주요 설정 파일로, Nginx의 동작 방식을 정의/etc/nginx/nginx.conf
경로에 위치
sites-available
, sites-enabled
이 두 디렉토리는 Nginx의 가상 호스트 설정을 관리하는데 사용
- sites-available
- 활성화되지 않은 사이트의 설정 파일을 보관하는 디렉토리
- 호스트별 설정 파일이 들어있으며, 각 파일은 하나의 서버 블록을 정의
- sites-enabled
- sites-available 디렉토리에 있는 설정 파일 중에서 실제로 활성화된 사이트의 설정 파일로 심볼릭 링크를 걸어두는
디렉토리 - Nginx는 이 디렉토리 안에 있는 설정 파일들을 실제로 로드하여 사용
- sites-available 디렉토리에 있는 설정 파일 중에서 실제로 활성화된 사이트의 설정 파일로 심볼릭 링크를 걸어두는
따라서 available에 설정을 하고 enabled에 링크를 걸어주면 됨
설정
/etc/nginx/nginx.conf
# Nginx 전역 설정
user www-data;
worker_processes auto;
pid /run/nginx.pid;
# 이벤트 설정
events {
worker_connections 1024;
}
# HTTP 블록 (모든 HTTP 관련 설정)
http {
include /etc/nginx/mime.types; # MIME 타입 정의
default_type application/octet-stream; # 기본 파일 타입
sendfile on;
keepalive_timeout 65;
# 사이트별 설정 파일 포함
include /etc/nginx/sites-enabled/*;
}
user www-data
- Nginx 프로세스가 사용할 사용자와 그룹을 지정하는 역할. 보통 www-data 사용자를 사용worker_processes auto
- 시스템의 CPU 수에 따라 워커 프로세스 수를 자동으로 설정pid /run/nginx.pid
- Nginx의 프로세스 ID(PID) 파일의 위치를 지정worker_connections 1024
- 각 워커 프로세스가 동시에 처리할 수 있는 최대 연결 수를 지정include /etc/nginx/mime.types
- Nginx가 MIME 타입을 정의한 파일을 포함하여, 파일 확장자에 따라 적절한 Content-Type
헤더를 설정default\_type application/octet-stream
- MIME 타입을 찾을 수 없는 경우 기본으로 적용할 타입을 설정sendfile on
- 파일을 효율적으로 전송하기 위해 sendfile을 사용하도록 설정keepalive\_timeout 65
- 클라이언트 연결을 유지하는 최대 시간을 초 단위로 설정include /etc/nginx/sites-enabled/*
- sites-enabled 디렉토리에 있는 모든 설정 파일을 포함
/etc/nginx/sited-available/maplem.conf
server {
listen 443 ssl;
server_name maplemworlds.kr www.maplemworlds.kr localhost 127.0.0.1 공인IP;
root /var/www/maplem;
index index.html;
location / {
try_files $uri /index.html;
}
location /api/ {
proxy_pass http://localhost:8080;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
# https certbot 설정
ssl_certificate /etc/letsencrypt/live/maplemworlds.kr/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/maplemworlds.kr/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
}
server {
listen 80;
server_name maplemworlds.kr www.maplemworlds.kr localhost 127.0.0.1 공인IP;
if ($host = www.maplemworlds.kr) {
return 301 https://$host$request_uri;
}
if ($host = maplemworlds.kr) {
return 301 https://$host$request_uri;
}
return 404;
}
- https 블럭
server_name
- 해당 서버 블록이 처리할 도메인 이름과 IP 주소를 지정(주 도메인, 서브 도메인, 로컬 호스트)root
- 웹 사이트의 루트 디렉토리 / react 프로젝트가 빌드된 디렉토리 파일이 들어오도록 하면 됨index
- 기본 인덱스 파일을 지정location /
- 기본 위치 블록 / SPA기 때문에 별도의 처리가 필요하지 않고index.html
로 보냄location /api/
- 백엔드 서버로 프록시 요청을 전달 / 로컬에서pm2
로 구성했기 때문에, 해당 주소로 요청listen 443 ssl
- 이 서버 블록이 SSL을 사용하여 443 포트에서 요청을 수신하도록 설정 (https)ssl_certificate
- SSL 인증서 파일의 경로ssl_certificate_key
- SSL 인증서 키 파일의 경로include /etc/letsencrypt/options-ssl-nginx.conf
- Certbot에서 제공하는 SSL 설정 옵션을 포함ssl_dhparam
- SSL DH 파라미터 파일의 경로를 지정합니다.
- http 블럭
- http로 접근 시 https로 영구 리디렉션
- 공인 IP는 우분투 기준
curl ifconfig.me
요청을 통해 확인이 가능
NginX 설정 변경 시 링크 과정
sudo rm /etc/nginx/sites-enabled/maplem.conf
sudo ln -s /etc/nginx/sites-available/maplem.conf /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
Certbot https 인증서 발급 과정
sudo apt update
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx
이후 도메인 입력하면 발급 완료
echo "0 0 * * 0 /usr/bin/certbot renew --quiet" | sudo tee -a /etc/crontab > /dev/null
크론잡 등록 시 일주일에 한번씩 자동 인증서 갱신