sudo apt update
sudo apt install nginx
설치 후, Nginx가 제대로 실행되고 있는지 확인
sudo systemctl status nginx
ls /var/log/nginx/기본적으로 Nginx 로그는 /var/log/nginx/ 디렉터리에 저장됩니다.
일반적으로 access.log(접속 로그)와 error.log(오류 로그)가 있습니다.
tail -f /var/log/nginx/access.log
tail -f /var/log/nginx/error.log
새로운 로그가 추가될 때마다 실시간으로 확인할 수 있습니다.
Ctrl + C로 종료 가능합니다.
접속 : 주소가 EC2의 퍼블릭 IPv4 로 http://43.201.64.159:8080 테스트
user nginx; # Nginx 프로세스의 실행 권한 설정
worker_processes 2; # CPU 코어당 최소한 하나의 프로세스 배정
pid /var/run/nginx.pid; # Nginx의 PID 파일 경로events {
worker_connections 1024; # 최대 1024개의 연결 처리
multi_accept off; # 기본값: off, 여러 연결을 한번에 수용할지 여부
}server 블록과 location 블록을 포함하며, 웹 서버의 동작을 설정하는 중요한 역할을 합니다.http {
include /etc/nginx/mime.types; # 파일 타입 설정
default_type application/octet-stream; # 기본 MIME 타입
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; # 파일 전송을 효율적으로 처리
keepalive_timeout 65; # 커넥션 유지 시간
server_tokens off; # NGINX 버전 숨기기
}server 블록을 사용하여 여러 사이트를 관리할 수 있습니다.server {
listen 80; # 80번 포트에서 HTTP 요청 수신
server_name pin-up.co.kr; # 도메인 설정
location / { # 모든 요청을 / 경로로 처리
root /var/www/html; # 서버의 루트 디렉터리 설정
index index.html index.htm; # 기본 인덱스 파일 설정
}
}server 블록 내에서 특정 URL 패턴을 처리하는 방법을 정의합니다.location /images/ {
root /var/www/static; # /images/ 요청을 /var/www/static 디렉터리에서 처리
}/etc/nginx/conf.d/ 디렉터리로 설정을 하는가?/etc/nginx/conf.d/ 설정한 이유/etc/nginx/conf.d/에 분리하여 관리하면 각 설정이 명확하게 나누어져 있어 관리가 수월합니다./etc/nginx/conf.d/에 추가된 모든 .conf 파일은 Nginx가 자동으로 로드합니다. 별도로 심볼릭 링크를 만들거나 nginx.conf에서 수동으로 설정을 포함시킬 필요가 없기 때문에, 설정 추가나 삭제가 매우 직관적이고 빠릅니다./etc/nginx/conf.d/ 방식은 여러 개의 파일을 개별적으로 관리할 수 있기 때문에 확장성과 유연성이 높습니다. 여러 서버를 한 서버에서 관리할 때, 각 서버에 대한 설정을 server 블록으로 관리하는 대신, 파일을 분리하여 각 설정을 보다 명확하게 나누어 관리할 수 있습니다./etc/nginx/conf.d/ 디렉터리를 사용하여 설정 파일을 관리하는 방법을 권장하고 있습니다. 이를 통해 더 간편하고 체계적인 서버 설정 관리를 할 수 있습니다.sites-enabled/ 방식에서는 사용하지 않는 설정 파일을 삭제하려면 심볼릭 링크를 삭제해야 하지만, /etc/nginx/conf.d/에서는 설정 파일을 직접 삭제하여 관리할 수 있습니다.symlink 작업이 필요하지 않음sites-enabled/에서는 사이트 설정을 추가할 때마다 심볼릭 링크를 생성해야 하지만, /etc/nginx/conf.d/는 .conf 파일을 추가하면 Nginx가 자동으로 로드하여 추가적인 작업 없이 설정이 적용됩니다./etc/nginx/sites-available/,/etc/nginx/sites-enabled/ ,/etc/nginx/conf.d//etc/nginx/sites-available/,/etc/nginx/sites-enabled/ ,/etc/nginx/conf.d/ 설명 및 차이점 정리/etc/nginx/sites-available/와 /etc/nginx/sites-enabled/ 사용 방법/etc/nginx/sites-available/
sites-available/에 추가합니다. 이 파일은 별도의 확장자를 가지지 않고, 보통 도메인명이나 default라는 이름으로 생성됩니다./etc/nginx/sites-available/sangdol 파일을 생성할 수 있습니다./etc/nginx/sites-enabled/
- 목적: 실제로 활성화된 설정을 관리하는 디렉터리입니다. sites-available/에서 생성한 설정 파일을 이곳에 심볼릭 링크로 연결하여 활성화합니다.
- 심볼릭 링크 생성: 설정 파일을 활성화하려면 sites-available/의 파일을 sites-enabled/로 심볼릭 링크로 연결합니다.
- 예시:이 명령은 sangdol 설정을 활성화합니다.
```bash
bash
복사편집
sudo ln -s /etc/nginx/sites-available/sangdol /etc/nginx/sites-enabled/sangdol
```
/etc/nginx/conf.d/ 사용 방법/etc/nginx/conf.d/
.conf 파일을 자동으로 로드합니다..conf 확장자를 사용하여 설정 파일을 생성합니다./etc/nginx/conf.d/pin-up.conf와 같은 설정 파일을 추가할 수 있습니다.기존 파일에서 불러오는 경우: /etc/nginx/conf.d/에서 불러오는 파일은 .conf 확장자가 필요하지만, 불필요한 파일은 삭제하거나 관리해야 합니다. 이 디렉터리 내 모든 .conf 파일은 자동으로 로드되므로, 사용하지 않는 파일은 삭제하여 관리해야 합니다.
/etc/nginx/sites-enabled/와 /etc/nginx/conf.d/ 사용 비교| 항목 | /etc/nginx/sites-available/ + /etc/nginx/sites-enabled/ | /etc/nginx/conf.d/ |
|---|---|---|
| 목적 | 사이트별 설정 관리 | 개별 설정을 모듈화하여 관리 |
| 활용 방식 | sites-available/에 설정 파일 생성 후 sites-enabled/로 심볼릭 링크 생성 | .conf 확장자 파일을 생성하여 Nginx가 자동으로 로드 |
| 설정 활성화 방법 | 심볼릭 링크 생성 (ln -s) | 파일 추가만으로 자동 로드 |
| 확장성 | 여러 사이트 설정 시 유용 | 리버스 프록시, SSL 설정 등 여러 설정을 모듈화하여 관리 |
| 유지관리 | 불필요한 사이트 설정을 sites-enabled/에서 삭제 가능 | 설정 파일 삭제 또는 수정 시 Nginx 재시작 필요 |
| Nginx 공식 문서 권장 | 권장되지 않음 | 권장됨 |
/etc/nginx/conf.d/를 사용하는가?/etc/nginx/conf.d/를 통한 설정 관리 방식을 추천합니다. 이 방법은 설정 파일을 모듈화하여 효율적으로 관리할 수 있게 해줍니다.symlink 작업이 필요하지 않음: sites-enabled/를 사용할 경우, 사이트 설정을 추가할 때마다 심볼릭 링크를 생성해야 합니다. 반면, /etc/nginx/conf.d/에 .conf 파일을 추가하면 Nginx가 자동으로 로드하여 추가적인 작업 없이 설정을 적용할 수 있습니다.sites-enabled/ 방식에서는 사용하지 않는 설정 파일을 삭제하려면 심볼릭 링크를 삭제해야 하지만, /etc/nginx/conf.d/에서는 불필요한 설정 파일을 직접 삭제하여 관리할 수 있습니다./etc/nginx/conf.d/ 디렉터리에 새로운 설정 파일을 생성합니다. 예를 들어, reverse-proxy.conf라는 파일을 생성합니다.sudo nano /etc/nginx/conf.d/pin-up.proxy-server.confreverse-proxy.conf 파일에 아래와 같은 리버스 프록시 설정을 추가합니다. (도메인 이름과 EC2 퍼블릭 IP를 본인 환경에 맞게 수정)server {
listen 80;
server_name pin-up.co.kr;
location / {
#proxy_pass http://43.201.64.159:8080; # 실제 백엔드 서버 포트(EIP 설정후 변경)
proxy_pass http://localhost:8080; # 실제 백엔드 서버 포트
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;
proxy_read_timeout 90;
proxy_connect_timeout 90;
}
}listen 80;: Nginx가 80번 포트에서 HTTP 요청을 수신하도록 설정.
listen 8080;: Nginx가 8080번 포트에서 HTTP 요청을 수신하도록 설정.
server_name pin-up.co.kr;: 요청을 처리할 도메인 이름 (예시: pin-up.co.kr).
proxy_pass http://43.201.64.159:8080;: HTTP 요청을 EC2 인스턴스의 퍼블릭 IP 주소로 전달하는 리버스 프록시 설정.
proxy_set_header: 원래 요청에 포함된 HTTP 헤더를 백엔드 서버로 전달.
파일에 설정을 추가한 후, Ctrl + O로 저장하고, Ctrl + X로 편집기를 종료합니다.
설정에 문제가 없는지 확인하려면 다음 명령어로 Nginx 설정을 테스트합니다:
sudo nginx -t
테스트가 성공적으로 완료되면 "syntax is ok"와 "test is successful" 메시지가 출력됩니다.
설정이 문제없다면, Nginx를 다시 로드하여 변경 사항을 적용합니다:
sudo systemctl reload nginx
default 파일을 SSL 설정 파일로 사용default 파일을 SSL 설정 파일로 사용default 파일을 그대로 사용하여 SSL 설정을 추가할 수 있습니다. default 파일에 SSL을 위한 설정을 추가하고, 인증서 경로를 설정하면 됩니다. 예를 들어, 다음과 같은 방식으로 SSL을 설정할 수 있습니다.default 파일 수정)nginx
복사편집
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _; # Elastic IP 할당 후 변경 필요
# HTTP -> HTTPS 리디렉션 (배포 후 적용)
location / {
return 301 https://$host$request_uri;
}
}
server {
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
# SSL 인증서 경로 (Certbot 발급 후 자동 적용됨)
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
# SSL 보안 설정 (인증서 적용 후 활성화 가능)
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:...'; # 더 강력한 암호화 설정을 위해 추가할 수 있음
ssl_prefer_server_ciphers on;
# HSTS 적용 (보안 강화 옵션)
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
# 서버 이름과 루트 디렉토리 설정
server_name example.com; # Elastic IP 적용 후 변경 필요
root /var/www/html;
# 기본 인덱스 설정
index index.html index.htm index.nginx-debian.html;
location / {
try_files $uri $uri/ =404;
}
}
이 방식으로 기존 default 파일에 SSL 설정을 추가하여, 배포 당일 Certbot을 사용해 SSL 인증서를 적용할 수 있습니다.default 파일을 사용하지 않고 새로운 파일을 생성하여 SSL 설정을 할 수도 있습니다. 예를 들어, ssl-example.com.conf라는 파일을 /etc/nginx/conf.d/에 새로 만들어서 SSL 설정을 추가할 수 있습니다.nginx
복사편집
server {
listen 80;
server_name example.com www.example.com;
# HTTP -> HTTPS 리디렉션
location / {
return 301 https://$host$request_uri;
}
}
server {
listen 443 ssl;
server_name example.com www.example.com;
# SSL 인증서 경로
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
# SSL 설정
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:...'; # 더 강력한 암호화 설정을 위해 추가할 수 있음
ssl_prefer_server_ciphers on;
# 루트 디렉토리와 기본 인덱스 설정
root /var/www/html;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
}
이 파일을 /etc/nginx/conf.d/에 저장하면 Nginx가 이를 자동으로 인식하게 됩니다.✅ 이유:
default 파일을 그대로 사용하면 불필요한 설정 변경 없이 간단히 SSL을 추가할 수 있음aws ec2 describe-addresses 2️⃣ 할당된 Elastic IP를 server_name에 반영server_name your-elastic-ip; 3️⃣ Certbot으로 SSL 인증서 발급 및 자동 설정/etc/letsencrypt/live/ 디렉토리에 SSL 인증서를 저장하고, Nginx 설정 파일을 자동으로 수정하여 인증서를 적용합니다.sudo certbot --nginx -d your-elastic-ip 4️⃣ 설정 확인 및 적용sudo nginx -t
sudo systemctl restart nginx