sudo systemctl start nginx | Nginx 서비스 시작 |
sudo systemctl stop nginx | Nginx 서비스 중지 |
sudo systemctl restart nginx | Nginx 서비스 재시작 |
sudo systemctl reload nginx | 재시작 없이 설정 다시 로드 |
sudo systemctl status nginx | Nginx 상태 확인 |
sudo systemctl enable nginx | 부팅 시 자동 시작 활성화 |
sudo systemctl disable nginx | 자동 시작 비활성화 |
nginx | Nginx 시작 |
nginx -s stop | 빠른 종료 |
nginx -s quit | 정상 종료 |
nginx -s reload | 설정 다시 로드 |
nginx -s reopen | 로그 파일 다시 열기 |
nginx -t | 설정 테스트 |
nginx -T | 설정 테스트 및 출력 |
nginx -v | 버전 표시 |
nginx -V | 버전 및 설정 옵션 표시 |
/etc/nginx/nginx.conf | 메인 설정 파일 |
/etc/nginx/conf.d/ | 추가 설정 디렉토리 |
/etc/nginx/sites-available/ | 사용 가능한 사이트 설정 (Debian) |
/etc/nginx/sites-enabled/ | 활성화된 사이트 설정 (Debian) |
/var/log/nginx/access.log | 접근 로그 파일 |
/var/log/nginx/error.log | 에러 로그 파일 |
/var/www/html/ | 기본 웹 루트 |
sudo ln -s /etc/nginx/sites-available/site /etc/nginx/sites-enabled/ | 사이트 활성화 |
sudo rm /etc/nginx/sites-enabled/site | 사이트 비활성화 |
sudo nginx -t && sudo systemctl reload nginx | 테스트 후 변경사항 적용 |
user nginx; | 워커 프로세스 사용자 |
worker_processes auto; | 워커 프로세스 수 |
error_log /var/log/nginx/error.log; | 에러 로그 경로 |
pid /run/nginx.pid; | PID 파일 경로 |
worker_connections 1024; | 워커당 최대 연결 수 |
use epoll; | epoll 사용 (Linux) |
multi_accept on; | 한 번에 여러 연결 수락 |
include /etc/nginx/mime.types; | MIME 타입 포함 |
sendfile on; | sendfile 활성화 |
keepalive_timeout 65; | Keep-alive 타임아웃 |
gzip on; | gzip 압축 활성화 |
listen 80; | 포트 80에서 수신 |
listen 80 default_server; | 포트 80의 기본 서버 |
listen [::]:80; | IPv6 포트 80에서 수신 |
server_name example.com www.example.com; | 서버 이름 |
server_name _; | 모든 요청을 받는 서버 이름 |
root /var/www/html; | 문서 루트 |
index index.html index.htm; | 기본 인덱스 파일 |
listen 443 ssl; | HTTPS 포트에서 수신 |
listen 443 ssl http2; | HTTP/2 활성화 |
ssl_certificate /path/to/cert.pem; | SSL 인증서 경로 |
ssl_certificate_key /path/to/key.pem; | SSL 키 경로 |
ssl_protocols TLSv1.2 TLSv1.3; | 허용된 SSL 프로토콜 |
ssl_prefer_server_ciphers on; | 서버 암호화 방식 우선 |
ssl_session_cache shared:SSL:10m; | SSL 세션 캐시 |
location / { } | 접두사 매칭 (가장 덜 구체적) |
location /images/ { } | /images/ 접두사 매칭 |
location = / { } | 정확히 일치 |
location ~ \.php$ { } | 대소문자 구분 정규식 |
location ~* \.(jpg|png)$ { } | 대소문자 무시 정규식 |
location ^~ /static/ { } | 접두사 매칭 (정규식 검색 중지) |
root /var/www/site; | 문서 루트 설정 |
alias /var/www/files/; | 로케이션 경로 대체 |
try_files $uri $uri/ /index.html; | 순서대로 파일 시도 |
try_files $uri $uri/ =404; | 없으면 404 반환 |
autoindex on; | 디렉토리 목록 활성화 |
proxy_pass http://localhost:3000; | 백엔드 서버로 프록시 |
proxy_set_header Host $host; | 원본 호스트 헤더 전달 |
proxy_set_header X-Real-IP $remote_addr; | 클라이언트 IP 전달 |
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; | forwarded-for 헤더 전달 |
proxy_set_header X-Forwarded-Proto $scheme; | 프로토콜 전달 (http/https) |
proxy_connect_timeout 60s; | 연결 타임아웃 |
proxy_send_timeout 60s; | 전송 타임아웃 |
proxy_read_timeout 60s; | 읽기 타임아웃 |
proxy_buffering on; | 응답 버퍼링 활성화 |
proxy_buffer_size 4k; | 첫 응답 버퍼 크기 |
upstream backend { server 127.0.0.1:3001; server 127.0.0.1:3002; } | 업스트림 그룹 정의 |
proxy_pass http://backend; | 업스트림 그룹 사용 |
server 127.0.0.1:3001 weight=3; | 가중치가 있는 서버 |
server 127.0.0.1:3001 backup; | 백업 서버 |
server 127.0.0.1:3001 down; | 서버를 다운으로 표시 |
(default) | 라운드 로빈 (기본) |
least_conn; | 최소 연결 |
ip_hash; | IP 해시 (스티키 세션) |
hash $request_uri; | URI 기반 해시 |
hash $request_uri consistent; | 일관된 해시 |
expires 30d; | 30일 캐시 |
expires max; | 무기한 캐시 |
expires -1; | 캐시 없음 |
add_header Cache-Control "public, max-age=86400"; | 사용자 정의 캐시 헤더 |
etag on; | ETag 활성화 |
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m; | 캐시 존 정의 |
proxy_cache my_cache; | 로케이션에서 캐싱 활성화 |
proxy_cache_valid 200 1d; | 200 응답 1일 캐시 |
proxy_cache_valid any 1m; | 모든 응답 1분 캐시 |
proxy_cache_bypass $http_cache_control; | 캐시 우회 조건 |
add_header X-Frame-Options "SAMEORIGIN"; | 클릭재킹 방지 |
add_header X-Content-Type-Options "nosniff"; | MIME 스니핑 방지 |
add_header X-XSS-Protection "1; mode=block"; | XSS 보호 |
add_header Strict-Transport-Security "max-age=31536000"; | HSTS 헤더 |
add_header Content-Security-Policy "default-src 'self'"; | CSP 헤더 |
allow 192.168.1.0/24; | IP 범위 허용 |
deny all; | 모두 거부 |
auth_basic "Restricted"; | 기본 인증 |
auth_basic_user_file /etc/nginx/.htpasswd; | 비밀번호 파일 |
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; | 속도 제한 존 |
limit_req zone=one burst=5; | 속도 제한 적용 |
access_log /var/log/nginx/access.log; | 접근 로그 경로 |
access_log off; | 접근 로그 비활성화 |
error_log /var/log/nginx/error.log warn; | 레벨이 있는 에러 로그 |
log_format main '$remote_addr - $request'; | 사용자 정의 로그 형식 |
access_log /var/log/nginx/access.log main; | 사용자 정의 형식 사용 |
$remote_addr | 클라이언트 IP 주소 |
$request | 전체 요청 라인 |
$status | 응답 상태 코드 |
$body_bytes_sent | 응답 본문 크기 |
$http_user_agent | 유저 에이전트 |
$request_time | 요청 처리 시간 |
return 301 https://$host$request_uri; | HTTPS로 영구 리다이렉트 |
return 302 /new-location; | 임시 리다이렉트 |
return 404; | 404 상태 반환 |
return 200 "OK"; | 본문과 함께 200 반환 |
rewrite ^/old$ /new permanent; | 영구 리라이트 (301) |
rewrite ^/old$ /new redirect; | 임시 리라이트 (302) |
rewrite ^/old$ /new last; | 리라이트 후 매칭 재시작 |
rewrite ^/old$ /new break; | 리라이트 후 중지 |
rewrite ^/user/(.*)$ /profile?id=$1 last; | 캡처 그룹으로 리라이트 |
$host | 요청 호스트 헤더 |
$uri | 요청 URI (정규화됨) |
$request_uri | 원본 요청 URI |
$args | 쿼리 문자열 |
$scheme | 요청 스킴 (http/https) |
$remote_addr | 클라이언트 IP |
$server_name | 일치한 서버 이름 |
if ($request_method = POST) { } | 요청 메서드 확인 |
if ($http_user_agent ~* "bot") { } | 유저 에이전트 정규식 매칭 |
if ($arg_debug) { } | 쿼리 파라미터 존재 확인 |
if (-f $request_filename) { } | 파일 존재 확인 |
set $var "value"; | 변수 설정 |
htpasswd -c /etc/nginx/.htpasswd user | 비밀번호 파일 생성 |
tail -f /var/log/nginx/access.log | 접근 로그 실시간 확인 |
tail -f /var/log/nginx/error.log | 에러 로그 실시간 확인 |
sudo certbot --nginx | Certbot으로 Let's Encrypt SSL |
nginx -t로 설정 테스트include를 사용해 설정을 여러 파일로 분리