← 홈

🌐Nginx

⌘K
🤖
Claude Code AI 도구
🤗
Hugging Face AI 도구
🦜
LangChain AI 도구
🧠
Keras AI 도구
🦙
Ollama AI 도구
🐍
Python 프로그래밍 언어
🟨
JavaScript 프로그래밍 언어
🔷
TypeScript 프로그래밍 언어
⚛️
React 프로그래밍 언어
🐹
Go 프로그래밍 언어
🦀
Rust 프로그래밍 언어
📊
MATLAB 프로그래밍 언어
🗄️
SQL 프로그래밍 언어
⚙️
C/C++ 프로그래밍 언어
Java 프로그래밍 언어
🟣
C# 프로그래밍 언어
🍎
Swift 프로그래밍 언어
🟠
Kotlin 프로그래밍 언어
Next.js 프로그래밍 언어
💚
Vue.js 프로그래밍 언어
🔥
Svelte 프로그래밍 언어
🎨
Tailwind CSS 프로그래밍 언어
💚
Node.js 프로그래밍 언어
🌐
HTML 프로그래밍 언어
🎨
CSS/SCSS 프로그래밍 언어
🐘
PHP 프로그래밍 언어
💎
Ruby 프로그래밍 언어
🔴
Scala 프로그래밍 언어
📊
R 프로그래밍 언어
🎯
Dart 프로그래밍 언어
💧
Elixir 프로그래밍 언어
🌙
Lua 프로그래밍 언어
🐪
Perl 프로그래밍 언어
🅰️
Angular 프로그래밍 언어
🚂
Express.js 프로그래밍 언어
🐱
NestJS 프로그래밍 언어
🛤️
Ruby on Rails 프로그래밍 언어
◼️
GraphQL 프로그래밍 언어
🟪
Haskell 프로그래밍 언어
💚
Nuxt.js 프로그래밍 언어
🔷
SolidJS 프로그래밍 언어
htmx 프로그래밍 언어
💻
VS Code 개발 도구
🧠
PyCharm 개발 도구
📓
Jupyter 개발 도구
🧠
IntelliJ IDEA 개발 도구
💚
Neovim 개발 도구
🔮
Emacs 개발 도구
🔀
Git DevOps & CLI
🐳
Docker DevOps & CLI
☸️
Kubernetes DevOps & CLI
☁️
AWS CLI DevOps & CLI
🔄
GitHub Actions DevOps & CLI
🐧
Linux 명령어 DevOps & CLI
💻
Bash 스크립팅 DevOps & CLI
🌐
Nginx DevOps & CLI
📝
Vim DevOps & CLI
🔨
Makefile DevOps & CLI
🧪
Pytest DevOps & CLI
🪟
Windows DevOps & CLI
📦
패키지 매니저 DevOps & CLI
🍎
macOS DevOps & CLI
🏗️
Terraform DevOps & CLI
🔧
Ansible DevOps & CLI
Helm DevOps & CLI
🔨
Jenkins DevOps & CLI
🔥
Prometheus DevOps & CLI
📊
Grafana DevOps & CLI
💻
Zsh DevOps & CLI
🐟
Fish Shell DevOps & CLI
💙
PowerShell DevOps & CLI
🔄
Argo CD DevOps & CLI
🔀
Traefik DevOps & CLI
☁️
Azure CLI DevOps & CLI
☁️
Google Cloud CLI DevOps & CLI
📟
tmux DevOps & CLI
🔧
jq DevOps & CLI
✂️
sed DevOps & CLI
📊
awk DevOps & CLI
🌊
Apache Airflow DevOps & CLI
🔢
NumPy 데이터베이스 & 데이터
🐼
Pandas 데이터베이스 & 데이터
🔥
PyTorch 데이터베이스 & 데이터
🧠
TensorFlow 데이터베이스 & 데이터
📈
Matplotlib 데이터베이스 & 데이터
🐘
PostgreSQL 데이터베이스 & 데이터
🐬
MySQL 데이터베이스 & 데이터
🍃
MongoDB 데이터베이스 & 데이터
🔴
Redis 데이터베이스 & 데이터
🔍
Elasticsearch 데이터베이스 & 데이터
🤖
Scikit-learn 데이터베이스 & 데이터
👁️
OpenCV 데이터베이스 & 데이터
Apache Spark 데이터베이스 & 데이터
🪶
SQLite 데이터베이스 & 데이터
Supabase 데이터베이스 & 데이터
🔵
Neo4j 데이터베이스 & 데이터
📨
Apache Kafka 데이터베이스 & 데이터
🐰
RabbitMQ 데이터베이스 & 데이터
🔤
Regex 유틸리티
📝
Markdown 유틸리티
📄
LaTeX 유틸리티
🔐
SSH & GPG 유틸리티
🌐
curl & HTTP 유틸리티
📜
reStructuredText 유틸리티
🚀
Postman 유틸리티
🎬
FFmpeg 유틸리티
🖼️
ImageMagick 유틸리티
🔍
ripgrep 유틸리티
🔍
fzf 유틸리티
📗
Microsoft Excel 오피스 애플리케이션
📘
Microsoft Word 오피스 애플리케이션
📙
Microsoft PowerPoint 오피스 애플리케이션
📝
한컴 한글 한컴오피스
📽️
한컴 한쇼 한컴오피스
📊
한컴 한셀 한컴오피스
📄
Google 문서 Google Workspace
📊
Google 스프레드시트 Google Workspace
📽️
Google 프레젠테이션 Google Workspace
🔌
Cadence Virtuoso EDA & 하드웨어
⚙️
Synopsys EDA EDA & 하드웨어
💎
Verilog & VHDL EDA & 하드웨어
LTSpice EDA & 하드웨어
🔧
KiCad EDA & 하드웨어
📝
Notion 생산성 도구
💎
Obsidian 생산성 도구
💬
Slack 생산성 도구
🎮
Discord 생산성 도구
🎨
Figma 디자인 도구
📘
Confluence Atlassian
📋
Jira Atlassian
🃏
Jest 테스팅
Vitest 테스팅
🎭
Playwright 테스팅
🌲
Cypress 테스팅
🌐
Selenium 테스팅
💙
Flutter 모바일 개발
📱
React Native 모바일 개발
🍎
SwiftUI 모바일 개발
📱
Expo 모바일 개발
🐍
Django 웹 프레임워크
FastAPI 웹 프레임워크
🌶️
Flask 웹 프레임워크
🍃
Spring Boot 웹 프레임워크
🍸
Gin 웹 프레임워크
Vite 빌드 도구
📦
Webpack 빌드 도구
esbuild 빌드 도구
🐘
Gradle 빌드 도구
🪶
Maven 빌드 도구
🔧
CMake 빌드 도구
🎮
Unity 게임 개발
🤖
Godot 게임 개발
🔌
Arduino 임베디드 & IoT
🔍
Nmap 보안
🐕
Datadog 모니터링
📖
Swagger/OpenAPI 문서화
검색 결과가 없습니다
EN KO

⚙️ 서비스 관리

Systemd 명령어

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 파일 경로

이벤트 & HTTP 컨텍스트

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; 기본 인덱스 파일

SSL/TLS 설정

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)

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

모범 사례

  • reload 전에 항상 nginx -t로 설정 테스트
  • include를 사용해 설정을 여러 파일로 분리
  • 텍스트 기반 콘텐츠에 gzip 압축 활성화
  • 정적 자산에 적절한 캐시 헤더 설정
  • 최신 TLS 프로토콜(1.2, 1.3)과 HTTPS 사용