๊ธˆ. 8์›” 1st, 2025

๐ŸŒŸ Nginx Proxy Manager๋ž€?

Nginx Proxy Manager(NPM)๋Š” ์›น ์„œ๋ฒ„ Nginx ๊ธฐ๋ฐ˜์˜ ์˜คํ”ˆ์†Œ์Šค ์—ญ๋ฐฉํ–ฅ ํ”„๋ก์‹œ ๊ด€๋ฆฌ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ๋ณต์žกํ•œ Nginx ์„ค์ • ํŒŒ์ผ ๋Œ€์‹  ์ง๊ด€์ ์ธ ์›น UI๋กœ ๋„๋ฉ”์ธ, SSL ์ธ์ฆ์„œ, ๋ฆฌ๋‹ค์ด๋ ‰์…˜ ๋“ฑ์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด DevOps ์ดˆ๋ณด์ž๋„ ์‰ฝ๊ฒŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค!


๐Ÿ›  ํ•„์ˆ˜ ์ค€๋น„ ์‚ฌํ•ญ

  1. Docker & Docker Compose ์„ค์น˜
    # Ubuntu ์˜ˆ์‹œ
    sudo apt update && sudo apt install docker.io docker-compose
  2. ๋„๋ฉ”์ธ ์†Œ์œ  (Let’s Encrypt SSL ์ ์šฉ ์‹œ ํ•„์ˆ˜)
  3. 80/443 ํฌํŠธ ๊ฐœ๋ฐฉ (HTTP/HTTPS ํŠธ๋ž˜ํ”ฝ ํ—ˆ์šฉ)

๐Ÿณ Docker Compose ํŒŒ์ผ ์ž‘์„ฑ

docker-compose.yml ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ณ  ๋‹ค์Œ ๋‚ด์šฉ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค:

version: '3.8'
services:
  app:
    image: 'jc21/nginx-proxy-manager:latest'
    container_name: npm
    restart: unless-stopped
    ports:
      - '80:80'      # HTTP
      - '443:443'    # HTTPS
      - '81:81'      # ๊ด€๋ฆฌ์ž UI ํฌํŠธ
    volumes:
      - ./data:/data    # ์„ค์ • ๋ฐ์ดํ„ฐ
      - ./letsencrypt:/etc/letsencrypt  # SSL ์ธ์ฆ์„œ
    environment:
      DB_SQLITE_FILE: "/data/database.sqlite"  # DB ์ €์žฅ ๊ฒฝ๋กœ
      DISABLE_IPV6: 'true'  # IPv6 ๋น„ํ™œ์„ฑํ™” (์„ ํƒ)

๐Ÿ” ์„ค์ • ์„ค๋ช…

  • volumes:
    • ./data: NPM ์„ค์ •/DB ์ €์žฅ ๊ฒฝ๋กœ (ํ˜ธ์ŠคํŠธ์˜ ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ์— ์ƒ์„ฑ)
    • ./letsencrypt: Let’s Encrypt ์ธ์ฆ์„œ ์ž๋™ ์ €์žฅ ์œ„์น˜
  • ports:
    • 81: ๊ด€๋ฆฌ์ž ์›น UI (http://์„œ๋ฒ„IP:81)
    • 80/443: ์‹ค์ œ ํŠธ๋ž˜ํ”ฝ ์ฒ˜๋ฆฌ ํฌํŠธ

๐Ÿš€ ์„œ๋น„์Šค ์‹คํ–‰ ๋ฐ ์ดˆ๊ธฐ ์„ค์ •

  1. ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰

    docker-compose up -d
  2. ์›น UI ์ ‘์†
    ๋ธŒ๋ผ์šฐ์ €์—์„œ http://:81 ์—ด๊ธฐ
    โ†’ ์ดˆ๊ธฐ ๊ณ„์ •: admin@example.com / ๋น„๋ฐ€๋ฒˆํ˜ธ: changeme
    NPM ๋กœ๊ทธ์ธ ํ™”๋ฉด

  3. ๋น„๋ฐ€๋ฒˆํ˜ธ ๋ณ€๊ฒฝ
    ์ฒซ ๋กœ๊ทธ์ธ ์‹œ ๋ฐ˜๋“œ์‹œ ๋ณ€๊ฒฝ! (Settings โ†’ Users)


๐Ÿ”ง ์—ญ๋ฐฉํ–ฅ ํ”„๋ก์‹œ ์„ค์ • ์˜ˆ์‹œ

๊ฐ€์ •: ์›Œ๋“œํ”„๋ ˆ์Šค ์‚ฌ์ดํŠธ(wordpress:80)๋ฅผ blog.mydomain.com์œผ๋กœ ๋…ธ์ถœ

  1. Proxy Hosts ์ถ”๊ฐ€
    • Hosts → Proxy Hosts → Add Proxy Host ํด๋ฆญ
  2. ๋„๋ฉ”์ธ & ํƒ€๊ฒŸ ์„ค์ •
    ๐Ÿ’ก Details ํƒญ  
     - Domain Names: blog.mydomain.com  
     - Scheme: http  
     - Forward Hostname/IP: wordpress (์ปจํ…Œ์ด๋„ˆ๋ช…)  
     - Port: 80  
  3. SSL ์ธ์ฆ์„œ ์ ์šฉ
    ๐Ÿ’ก SSL ํƒญ  
     - SSL Certificate: Request a new SSL Certificate  
     - Email: ๋ณธ์ธ ์ด๋ฉ”์ผ  
     - Force SSL โ˜‘๏ธ  

    โ†’ Let’s Encrypt๊ฐ€ ์ž๋™์œผ๋กœ ์ธ์ฆ์„œ ๋ฐœ๊ธ‰!


โš™๏ธ ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ ํ™œ์šฉ๋ฒ•

1. ์ ‘๊ทผ ์ œ์–ด (Access Lists)

  • IP ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ/๋ธ”๋ž™๋ฆฌ์ŠคํŠธ ์„ค์ • ๊ฐ€๋Šฅ
  • Access → Access Lists์—์„œ ์ƒ์„ฑ ํ›„ Proxy Host์— ์—ฐ๊ฒฐ

2. ๋ฆฌ๋‹ค์ด๋ ‰์…˜

  • http://mydomain.com โ†’ https://www.mydomain.com ์ž๋™ ์ „ํ™˜
    ๐Ÿ’ก Redirection Hosts ์ถ”๊ฐ€  
     - Source: mydomain.com  
     - Target: https://www.mydomain.com  

3. ์ŠคํŠธ๋ฆฌ๋ฐ ์ง€์› (WebSocket ๋“ฑ)

   # Advanced ํƒญ์— ์ถ”๊ฐ€
   location / {
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection "upgrade";
   }

๐Ÿšจ ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…

  • 403 Forbidden:
    โ†’ ํƒ€๊ฒŸ ์„œ๋น„์Šค์˜ ๋ฐฉํ™”๋ฒฝ์—์„œ NPM ์ปจํ…Œ์ด๋„ˆ IP ํ—ˆ์šฉ ํ™•์ธ
  • SSL ๋ฐœ๊ธ‰ ์‹คํŒจ:
    โ†’ ๋„๋ฉ”์ธ DNS๊ฐ€ ์„œ๋ฒ„ IP๋กœ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์—ฐ๊ฒฐ๋˜์—ˆ๋Š”์ง€ ํ™•์ธ
    โ†’ ./letsencrypt ๋ณผ๋ฅจ ๊ถŒํ•œ ์ฒดํฌ (chmod 755 letsencrypt)
  • DB ์˜ค๋ฅ˜:
    # ๋ฐ์ดํ„ฐ ์žฌ์ƒ์„ฑ
    docker-compose down
    rm -rf data
    docker-compose up -d

โœ… NPM์˜ ์žฅ์  ์ •๋ฆฌ

๊ธฐ๋Šฅ ์žฅ์ 
๐Ÿšช ์—ญ๋ฐฉํ–ฅ ํ”„๋ก์‹œ ํ•œ ์„œ๋ฒ„์—์„œ ๋‹ค์ค‘ ๋„๋ฉ”์ธ/์„œ๋น„์Šค ๊ด€๋ฆฌ
๐Ÿ” SSL ์ž๋™ํ™” Let’s Encrypt ํ†ตํ•œ ๋ฌด๋ฃŒ HTTPS
๐Ÿ–ฅ๏ธ UI ๊ด€๋ฆฌ CLI ๋ถˆํ•„์š”, ์ดˆ๋ณด์ž ์นœํ™”์ 
๐Ÿ“Š ๋ชจ๋‹ˆํ„ฐ๋ง ํŠธ๋ž˜ํ”ฝ/์—๋Ÿฌ ๋กœ๊ทธ ์‹ค์‹œ๊ฐ„ ํ™•์ธ

๐ŸŽฏ ๋งˆ์น˜๋ฉฐ

Nginx Proxy Manager๋Š” ๋ณต์žกํ•œ Nginx ์„ค์ •์„ GUI๋กœ ๋‹จ์ˆœํ™”ํ•œ ํ˜์‹ ์ ์ธ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. Docker Compose๋กœ 5๋ถ„ ๋งŒ์— ๊ตฌ์ถ• ๊ฐ€๋Šฅํ•˜๊ณ , ๋ฌด๋ฃŒ SSL ์ž๋™ ๊ฐฑ์‹ ๊นŒ์ง€ ์ง€์›ํ•˜๋‹ˆ ์›น ์„œ๋น„์Šค ์šด์˜์— ํ•„์ˆ˜ํ…œ์ด์ฃ ! ์ง€๊ธˆ ๋ฐ”๋กœ ๋„์ปค ์ปดํฌ์ฆˆ ํŒŒ์ผ์„ ์ž‘์„ฑํ•ด ์—ญ๋ฐฉํ–ฅ ํ”„๋ก์‹œ์˜ ์„ธ๊ณ„๋ฅผ ์—ด์–ด๋ณด์„ธ์š” โœจ

> ๐Ÿ“š ๊ณต์‹ ๋ฌธ์„œ: nginxproxymanager.com
> ๐Ÿ’ฌ ๋ฌธ์ œ ๋ฐœ์ƒ ์‹œ: GitHub Issues ๋˜๋Š” ์ปค๋ฎค๋‹ˆํ‹ฐ ํ™œ์šฉ ์ถ”์ฒœ! D

๋‹ต๊ธ€ ๋‚จ๊ธฐ๊ธฐ

์ด๋ฉ”์ผ ์ฃผ์†Œ๋Š” ๊ณต๊ฐœ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•„์ˆ˜ ํ•„๋“œ๋Š” *๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค