๐ Nginx Proxy Manager๋?
Nginx Proxy Manager(NPM)๋ ์น ์๋ฒ Nginx ๊ธฐ๋ฐ์ ์คํ์์ค ์ญ๋ฐฉํฅ ํ๋ก์ ๊ด๋ฆฌ ๋๊ตฌ์ ๋๋ค. ๋ณต์กํ Nginx ์ค์ ํ์ผ ๋์ ์ง๊ด์ ์ธ ์น UI๋ก ๋๋ฉ์ธ, SSL ์ธ์ฆ์, ๋ฆฌ๋ค์ด๋ ์ ๋ฑ์ ๊ด๋ฆฌํ ์ ์์ด DevOps ์ด๋ณด์๋ ์ฝ๊ฒ ์ฌ์ฉ ๊ฐ๋ฅํฉ๋๋ค!
๐ ํ์ ์ค๋น ์ฌํญ
- Docker & Docker Compose ์ค์น
# Ubuntu ์์ sudo apt update && sudo apt install docker.io docker-compose
- ๋๋ฉ์ธ ์์ (Let’s Encrypt SSL ์ ์ฉ ์ ํ์)
- 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
: ์ค์ ํธ๋ํฝ ์ฒ๋ฆฌ ํฌํธ
๐ ์๋น์ค ์คํ ๋ฐ ์ด๊ธฐ ์ค์
-
์ปจํ ์ด๋ ์คํ
docker-compose up -d
-
์น UI ์ ์
๋ธ๋ผ์ฐ์ ์์http://:81
์ด๊ธฐ
โ ์ด๊ธฐ ๊ณ์ : admin@example.com / ๋น๋ฐ๋ฒํธ: changeme
-
๋น๋ฐ๋ฒํธ ๋ณ๊ฒฝ
์ฒซ ๋ก๊ทธ์ธ ์ ๋ฐ๋์ ๋ณ๊ฒฝ! (Settings โ Users)
๐ง ์ญ๋ฐฉํฅ ํ๋ก์ ์ค์ ์์
๊ฐ์ : ์๋ํ๋ ์ค ์ฌ์ดํธ(wordpress:80
)๋ฅผ blog.mydomain.com
์ผ๋ก ๋
ธ์ถ
- Proxy Hosts ์ถ๊ฐ
Hosts → Proxy Hosts → Add Proxy Host
ํด๋ฆญ
- ๋๋ฉ์ธ & ํ๊ฒ ์ค์
๐ก Details ํญ - Domain Names: blog.mydomain.com - Scheme: http - Forward Hostname/IP: wordpress (์ปจํ ์ด๋๋ช ) - Port: 80
- 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