CDN(์ฝํ ์ธ ์ ์ก ๋คํธ์ํฌ)์ ์ฃผ๋ก ์ ์ ์์์ ๋ก๋ ์๋๋ฅผ ๋์ด๊ธฐ ์ํด ์น์ฌ์ดํธ์ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฌ์ฉ๋ฉ๋๋ค. ์ด๋ ๋ค๋ฅธ ์ง์ญ์ ์์นํ CDN ์๋ฒ์ ํ์ผ์ ์บ์ฑํจ์ผ๋ก์จ ๋ฐ์ํฉ๋๋ค. CDN์ ํตํด ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๋ฉด ์ฌ์ฉ์๋ ๊ฐ์ฅ ๊ฐ๊น์ด ์๋ฒ์์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ต๋๋ค.
๋ชจ๋ ์ฝํ ์ธ ์ ๋ฌ ๋คํธ์ํฌ์ ์๋ ์๋ฆฌ์ ๊ธฐ๋ฅ์ ๊ฑฐ์ ๋์ผํฉ๋๋ค. CDN ์๋ฒ๋ ํ์ผ ๋ค์ด๋ก๋ ์์ฒญ์ ๋ฐ์ผ๋ฉด ์๋ณธ ์๋ฒ์์ ํด๋น ํ์ผ์ ํ ๋ฒ ๊ฐ์ ธ์ ์ฌ์ฉ์์๊ฒ ์ ๊ณตํ๋ ๋์์ ์ง์ ๋ ๊ธฐ๊ฐ ๋์ ์บ์ํฉ๋๋ค. ๋ชจ๋ ํ์ ์์ฒญ์ ์บ์์์ ์๋ต๋ฉ๋๋ค. ๋ชจ๋ CDN์๋ ํ์ผ ๋ฏธ๋ฆฌ ๋ก๋, ์บ์ ์ง์ฐ๊ธฐ, ์บ์ ๋ง๋ฃ ์ค์ ๋ฑ์ ์ํ ์ต์ ์ด ์์ต๋๋ค.
์ด๋ค ์ด์ ๋ก๋ ์์ ๋ง์ ์ฝํ ์ธ ์ ๋ฌ ๋คํธ์ํฌ๋ฅผ ๊ตฌ์ฑํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ์์ผ๋ฉฐ, ๋ค์ ์์ ๊ฑฐ ์กฐ๋ฆฝ ์ง์นจ์ด ๋์์ด ๋ ์ ์์ต๋๋ค.
์ถ์ฒ :
์ธ์ ์์ฒด CDN์ด ํ์ํฉ๋๊น?
์์ฒด CDN์ ์คํํ๋ ๊ฒ์ด ์ ํฉํ ๊ฒฝ์ฐ๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
- ๊ฐ์ ์ ๋ ดํ CDN์ ์ฌ์ฉํ๋๋ผ๋ ๋น์ฉ๊ณผ ์ด์ ๋น์ฉ์ ์ ์ฝํ๊ณ ์ถ์ ๋
๋ฒ๋์จ๋์ ํ ๋ฌ์ ์๋ฐฑ ๋ฌ๋ฌ์ ๋ฌํ๋ ๊ธ์ก - ์๊ตฌ ์บ์๋ฅผ ์ํ๊ฑฐ๋ ์๋ฒ์ ์ฑ๋์ ์ด์์ด ์๋ ์บ์๋ฅผ ์ํ ๊ฒฝ์ฐ
- CDN ์๋น์ค์๋ ํ์ํ ์ง์ญ์ ์ ์ ์ง์ ์ด ์์ต๋๋ค.
- ํน๋ณํ ์ฝํ ์ธ ์ ๋ฌ ์ค์ ์ด ํ์ํฉ๋๋ค.
- ์ฐ๋ฆฌ๋ ํ๋ก๋์ ์๋ฒ๋ฅผ ์ฌ์ฉ์์๊ฒ ๋ ๊ฐ๊น๊ฒ ๋ฐฐ์นํ์ฌ ๋์ ์ฝํ ์ธ ์ ๋ฌ ์๋๋ฅผ ๋์ด๊ณ ์ถ์ต๋๋ค.
- ํ์ฌ CDN ์๋น์ค๊ฐ ์ฌ์ฉ์ ํ๋์ ๋ํ ์ ๋ณด๋ฅผ ๋ถ์ ์ ํ๊ฒ ์์ง ๋๋ ์ฌ์ฉํ๊ฑฐ๋(GDPR์ ์ค์ํ์ง ์๋ ์๋น์ค์ ๊ฒฝ์ฐ) ๊ธฐํ ๋ถ๋ฒ ํ๋์ ์ฐธ์ฌํ ์ ์๋ค๋ ์ฐ๋ ค๊ฐ ์์ต๋๋ค.
๋๋ถ๋ถ์ ๊ฒฝ์ฐ์๋ ๊ธฐ์กด์ ๊ธฐ์ฑ ์๋ฃจ์ ์ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ์ ์ ํฉ๋๋ค.
์์ํ๊ธฐ ์ํด ํ์ํ ๊ฒ
์์ ๋ง์ ์์จ์์คํ
(AS)์ด ์๋ค๋ฉด ์ ๋ง ์ข์ต๋๋ค. ์ด๋ฅผ ํตํด ๋์ผํ IP๋ฅผ ์ฌ๋ฌ ์๋ฒ์ ํ ๋นํ ์ ์์ผ๋ฉฐ
IP ์ฃผ์ ๋ธ๋ก์ ์ด ์ข์ ์์ ์๊ฐ ์๋ ๊ฒฝ์ฐ ๊ฐ๋จํ CDN์ ์์ํ๋ ค๋ฉด ๋ค์์ด ํ์ํฉ๋๋ค.
- ๋๋ฉ์ธ ์ด๋ฆ ๋๋ ํ์ ๋๋ฉ์ธ
- ์๋ก ๋ค๋ฅธ ์ง์ญ์ ์๋ ๋ ๊ฐ ์ด์์ ์๋ฒ. ์๋ฒ๋ ์ ์ฉ์ด๊ฑฐ๋ ๊ฐ์์ผ ์ ์์ต๋๋ค.
- geoDNS ๋๊ตฌ. ๋์์ ๋ฐ์ผ๋ฉด ๋๋ฉ์ธ์ ์ก์ธ์คํ๋ ์ฌ์ฉ์๊ฐ ๊ฐ์ฅ ๊ฐ๊น์ด ์๋ฒ๋ก ์ฐ๊ฒฐ๋ฉ๋๋ค.
๋๋ฉ์ธ ๋ฑ๋ก ๋ฐ ์๋ฒ ์ฃผ๋ฌธ
๋๋ฉ์ธ ๋ฑ๋ก์ ์ฌ์ฉํ๋ฉด ๋ชจ๋ ๊ฒ์ด ๊ฐ๋จํฉ๋๋ค. ๋ชจ๋ ๋ฑ๋ก ๊ธฐ๊ด์ ํตํด ๋ชจ๋ ์์ญ์ ๋ฑ๋กํฉ๋๋ค. ์๋ฅผ ๋ค์ด CDN์ ํ์ ๋๋ฉ์ธ์ ์ฌ์ฉํ ์๋ ์์ต๋๋ค. cdn.๋๋ฉ์ธ์ด๋ฆ.com. ์ฌ์ค, ์ฐ๋ฆฌ์ ์์์๋ ๊ทธ๋ ๊ฒ ํ ๊ฒ์ ๋๋ค.
์๋ฒ ์ฃผ๋ฌธ์ ๊ฒฝ์ฐ ์ฌ์ฉ์ ์ฒญ์ค์ด ์์นํ ์ง์ญ ๋ฐ ๊ตญ๊ฐ์์ ์๋ํด์ผ ํฉ๋๋ค. ํ๋ก์ ํธ๊ฐ ๋๋ฅ ๊ฐ์ด๋ผ๋ฉด ์ ์ธ๊ณ์ ์๋ฒ๋ฅผ ์ ๊ณตํ๋ ํธ์คํ
์ ๊ณต์
์ฒด๋ฅผ ์ ํํ๋ ๊ฒ์ด ํธ๋ฆฌํฉ๋๋ค. ์:
๊ฐ์ธ CDN์ ๊ฒฝ์ฐ ์๋ก ๋ค๋ฅธ ๋๋ฅ์ 3๊ฐ์ ๊ฐ์ ์๋ฒ๋ฅผ ์ฃผ๋ฌธํฉ๋๋ค. ์ ๋ฒ ํฐ ์๋ฒ์์ $5/์ ์ฐ๋ฆฌ๋ ์ป์ ๊ฒ์ด๋ค 25GB SSD ์ฅ์์ 1TB ํธ๋ํฝ. ์ค์นํ๋ ๋์ ์ต์ Debian์ ์ ํํฉ๋๋ค. ์ฐ๋ฆฌ ์๋ฒ:
ํ๋ํฌํธ๋ฅดํธ, IP: 199.247.18.199
์์นด๊ณ , IP: 149.28.121.123
์ฑ๊ฐํฌ๋ฅด, IP: 157.230.240.216
*Vultr์ DigitalOcean์ ๊ฒฐ์ ๋ฐฉ๋ฒ์ ์ถ๊ฐํ ํ ์ด ๊ธฐ์ฌ์ ๋งํฌ๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ ํ๋ ์ฌ์ฉ์์๊ฒ 100๋ฌ๋ฌ์ ํฌ๋ ๋ง์ ์ฝ์ํฉ๋๋ค. ์ ์๋ ์ด์ ๋ํด ์์ ์นญ์ฐฌ์ ๋ฐ์๋๋ฐ, ์ด๋ ์ง๊ธ ๊ทธ์๊ฒ ๋งค์ฐ ์๋ฏธ ์๋ ์ผ์ด๋ค. ์ดํดํด ์ฃผ์๊ธฐ ๋ฐ๋๋๋ค.
geoDNS ์ค์
์ฌ์ฉ์๊ฐ CDN ๋๋ฉ์ธ ๋๋ ํ์ ๋๋ฉ์ธ์ ์ก์ธ์คํ ๋ ์ํ๋(๊ฐ์ฅ ๊ฐ๊น์ด) ์๋ฒ๋ก ์ฐ๊ฒฐ๋๋๋ก ํ๋ ค๋ฉด geoDNS ๊ธฐ๋ฅ์ด ์๋ DNS ์๋ฒ๊ฐ ํ์ํฉ๋๋ค.
geoDNS์ ์๋ฆฌ์ ์๋ ์ ์ฐจ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- DNS ์์ฒญ์ ๋ณด๋ธ ํด๋ผ์ด์ธํธ์ IP ๋๋ ํด๋ผ์ด์ธํธ ์์ฒญ์ ์ฒ๋ฆฌํ ๋ ์ฌ์ฉ๋๋ ์ฌ๊ท DNS ์๋ฒ์ IP๋ฅผ ์ ์ํฉ๋๋ค. ์ด๋ฌํ ์ฌ๊ท ์๋ฒ๋ ์ผ๋ฐ์ ์ผ๋ก DNS ๊ณต๊ธ์์ ๋๋ค.
- ํด๋ผ์ด์ธํธ์ IP๋ ํด๋น ๊ตญ๊ฐ ๋๋ ์ง์ญ์ ์๋ณํฉ๋๋ค. ์ด๋ฅผ ์ํด ์ค๋๋ ๋งค์ฐ ๋ง์ GeoIP ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์ข์ ๊ฒ๋ค๋ ์์ด์
๋ฌด๋ฃ ์ต์ . - ํด๋ผ์ด์ธํธ์ ์์น์ ๋ฐ๋ผ ๊ฐ์ฅ ๊ฐ๊น์ด CDN ์๋ฒ์ IP ์ฃผ์๋ฅผ ์ ๊ณตํฉ๋๋ค.
geoDNS ๊ธฐ๋ฅ์ ๊ฐ์ถ DNS ์๋ฒ๋
ํด๋ผ์ฐ๋DNS ๋ถํฐ $9.95/์, GeoDNS ๊ด์ธ, ๊ธฐ๋ณธ์ ์ผ๋ก ํ๋์ DNS ์ฅ์ ์กฐ์น๊ฐ ์์ต๋๋ค์ง๋ก๋ ๋ถํฐ $25/์, DNS ์ฅ์ ์กฐ์น ํ์ฑํ๋จ์๋ง์กด ๊ฒฝ๋ก 53 ๋ถํฐ $35/์ ์์ 50์ฒ๋ง ๊ฐ์ ์ง์ญ ์ฟผ๋ฆฌ์ ๊ฒฝ์ฐ. DNS ์ฅ์ ์กฐ์น ๋น์ฉ์ ๋ณ๋๋ก ์ฒญ๊ตฌ๋ฉ๋๋ค.์ฌ์ด DNS ๋ถํฐ $125/์, 10๊ฐ์ DNS ์ฅ์ ์กฐ์น๊ฐ ์์ต๋๋ค.Cloudflare , "Geo Steering" ๊ธฐ๋ฅ์ Enterprise ๊ด์ธ์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
geoDNS๋ฅผ ์ฃผ๋ฌธํ ๋ ์๊ธ์ ํฌํจ๋ ์์ฒญ ์์ ์ฃผ์ํ๊ณ ๋๋ฉ์ธ์ ๋ํ ์ค์ ์์ฒญ ์๊ฐ ์์๋ณด๋ค ๋ช ๋ฐฐ ๋ ๋์ ์ ์๋ค๋ ์ ์ ๊ณ ๋ คํด์ผ ํฉ๋๋ค. ์๋ฐฑ๋ง ๋ช ์ ๊ฑฐ๋ฏธ, ์ค์บ๋, ์คํจ๋จธ ๋ฐ ๊ธฐํ ์ ๋ น์ด ์ง์น ์ค ๋ชจ๋ฅด๊ณ ์ผํฉ๋๋ค.
๊ฑฐ์ ๋ชจ๋ DNS ์๋น์ค์๋ CDN ๊ตฌ์ถ์ ํ์์ ์ธ ์๋น์ค์ธ DNS ์ฅ์ ์กฐ์น๊ฐ ๊ฐ๊ฒฉ์ ํฌํจ๋ฉ๋๋ค. ๋์์ ๋ฐ์ผ๋ฉด ์๋ฒ ์๋ ๋ชจ๋ํฐ๋ง์ ์ค์ ํ ์ ์์ผ๋ฉฐ, ์๋ช ์ ์งํ๊ฐ ์๋ ๊ฒฝ์ฐ DNS ์๋ต์์ ์๋ํ์ง ์๋ ์๋ฒ์ ์ฃผ์๋ฅผ ๋ฐฑ์ ์ฃผ์๋ก ์๋ ๊ต์ฒดํ ์ ์์ต๋๋ค.
CDN์ ๊ตฌ์ถํ๊ธฐ ์ํด ์ฐ๋ฆฌ๋
๊ฐ์ธ ๊ณ์ ์ ๋๋ฉ์ธ์ ๋ํ๋ด๋ ์ DNS ์์ญ์ ์ถ๊ฐํด ๋ณด๊ฒ ์ต๋๋ค. ํ์ ๋๋ฉ์ธ์ CDN์ ๊ตฌ์ถํ๊ณ ๊ธฐ๋ณธ ๋๋ฉ์ธ์ด ์ด๋ฏธ ์ฌ์ฉ ์ค์ธ ๊ฒฝ์ฐ ์์ญ์ ์ถ๊ฐํ ํ ์ฆ์ ๊ธฐ์กด ์์ DNS ๋ ์ฝ๋๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ ์์ง ๋ง์ธ์. ๋ค์ ๋จ๊ณ๋ CDN ๋๋ฉ์ธ/ํ์ ๋๋ฉ์ธ์ ๋ํด ์ฌ๋ฌ A ๋ ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒ์ ๋๋ค. ๊ฐ ๋ ์ฝ๋๋ ์ฐ๋ฆฌ๊ฐ ์ง์ ํ ์ง์ญ์ ์ฌ์ฉ๋ฉ๋๋ค. ๋๋ฅ์ด๋ ๊ตญ๊ฐ๋ฅผ ์ง์ญ์ผ๋ก ์ง์ ํ ์ ์์ผ๋ฉฐ, ์์ง์ญ์ ๋ฏธ๊ตญ๊ณผ ์บ๋๋ค์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ฐ๋ฆฌ์ ๊ฒฝ์ฐ CDN์ ํ์ ๋๋ฉ์ธ์์ ๋ฐ์ํฉ๋๋ค. cdn.sayt.in. ์์ญ์ ์ถ๊ฐํ์ฌ sayt.in, ํ์ ๋๋ฉ์ธ์ ๋ํ ์ฒซ ๋ฒ์งธ A ๋ ์ฝ๋๋ฅผ ์์ฑํ๊ณ ๋ถ๋ฏธ ์ ์ฒด๋ฅผ ์์นด๊ณ ์ ์๋ ์๋ฒ๋ก ์ฐ๊ฒฐํด ๋ณด๊ฒ ์ต๋๋ค.
๊ธฐ๋ณธ ์ง์ญ์ ๋ํด ํ๋์ ํญ๋ชฉ์ ๋ง๋๋ ๊ฒ์ ์์ง ๋ง๊ณ ๋ค๋ฅธ ์ง์ญ์ ๋ํด์๋ ์์
์ ๋ฐ๋ณตํด ๋ณด๊ฒ ์ต๋๋ค. ๊ฒฐ๊ตญ ์ป๋ ๊ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์คํฌ๋ฆฐ์ท์ ๋ง์ง๋ง ๊ธฐ๋ณธ ํญ๋ชฉ์ ์ง์ ๋์ง ์์ ๋ชจ๋ ์ง์ญ(์ ๋ฝ, ์ํ๋ฆฌ์นด, ์์ฑ ์ธํฐ๋ท ์ฌ์ฉ์ ๋ฑ)์ด ํ๋ํฌํธ๋ฅดํธ์ ์๋ฒ๋ก ์ ์ก๋๋ค๋ ์๋ฏธ์ ๋๋ค.
์ด๊ฒ์ผ๋ก ๊ธฐ๋ณธ์ ์ธ DNS ์ค์ ์ด ์๋ฃ๋์์ต๋๋ค. ์ด์ ๋๋ฉ์ธ ๋ฑ๋ก ๊ธฐ๊ด์ ์น์ฌ์ดํธ์ ์ ์ํ์ฌ ํ์ฌ ๋๋ฉ์ธ NS๋ฅผ ClouDNS์์ ๋ฐ๊ธํ NS๋ก ๊ต์ฒดํ๋ฉด ๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ NS๊ฐ ์ ๋ฐ์ดํธ๋๋ ๋์ ์๋ฒ๋ฅผ ์ค๋นํ๊ฒ ์ต๋๋ค.
SSL ์ธ์ฆ์ ์ค์น
๋น์ฌ์ CDN์ HTTPS๋ฅผ ํตํด ์๋ํ๋ฏ๋ก ๋๋ฉ์ธ ๋๋ ํ์ ๋๋ฉ์ธ์ ๋ํ SSL ์ธ์ฆ์๊ฐ ์ด๋ฏธ ์๋ ๊ฒฝ์ฐ ์ด๋ฅผ ๋ชจ๋ ์๋ฒ(์: ๋๋ ํฐ๋ฆฌ)์ ์ ๋ก๋ํ์ธ์. /etc/ssl/๋๋ฉ์ธ/
์ธ์ฆ์๊ฐ ์์ผ๋ฉด Let's Encrypt์์ ๋ฌด๋ฃ๋ก ์ธ์ฆ์๋ฅผ ์ป์ ์ ์์ต๋๋ค. ์ด๊ฒ์ ๋ฑ ๋ง์ต๋๋ค
์ฐ๋ฆฌ๋ ์๋ฒ ์ค ํ๋์ธ ์ ๋ฝ 199.247.18.199์๋ง acme.sh๋ฅผ ์ค์นํฉ๋๋ค. ์ด ์๋ฒ์์ ์ธ์ฆ์๋ ๋ค๋ฅธ ๋ชจ๋ ์๋ฒ๋ก ๋ณต์ฌ๋ฉ๋๋ค. ์ค์นํ๋ ค๋ฉด ๋ค์์ ์ํํ์ญ์์ค.
root@cdn:~# wget -O - https://get.acme.sh | bash; source ~/.bashrc
์คํฌ๋ฆฝํธ๋ฅผ ์ค์นํ๋ ๋์ ๋น์ฌ์ ์ฐธ์ฌ ์์ด ์ธ์ฆ์๋ฅผ ์ถ๊ฐ๋ก ์ ๋ฐ์ดํธํ๊ธฐ ์ํ CRON ์์ ์ด ์์ฑ๋ฉ๋๋ค.
์ธ์ฆ์ ๋ฐ๊ธ ์ ๋๋ฉ์ธ ํ์ธ์ API๋ฅผ ์ฌ์ฉํ์ฌ DNS๋ฅผ ํตํด ์ํ๋๋ฏ๋ก Reseller API ๋ฉ๋ด์ ClouDNS ๊ฐ์ธ ๊ณ์ ์์ ์ API ์ฌ์ฉ์๋ฅผ ์์ฑํ๊ณ ๋น๋ฐ๋ฒํธ๋ฅผ ์ค์ ํด์ผ ํฉ๋๋ค. ๊ฒฐ๊ณผ auth-id์ ๋น๋ฐ๋ฒํธ๋ฅผ ํ์ผ์ ๊ธฐ๋กํฉ๋๋ค. ~/.acme.sh/dnsapi/dns_cloudns.sh (ํ์ผ๊ณผ ํผ๋ํ์ง ๋ง์ธ์. dns_clouddns.sh). ์ฃผ์์ ์ ๊ฑฐํ๊ณ ํธ์งํด์ผ ํ๋ ์ค์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
CLOUDNS_AUTH_ID=<auth-id>
CLOUDNS_AUTH_PASSWORD="<ะฟะฐัะพะปั>"
์ด์ SSL ์ธ์ฆ์๋ฅผ ์์ฒญํด ๋ณด๊ฒ ์ต๋๋ค. cdn.sayt.in
root@cdn:~# acme.sh --issue --dns dns_cloudns -d cdn.sayt.in --reloadcmd "service nginx reload"
๋งค๊ฐ๋ณ์์๋ ์์ผ๋ก ๊ฐ ์ธ์ฆ์ ์ ํจ์ฑ ์ ๋ฐ์ดํธ ํ์ ์น ์๋ฒ ๊ตฌ์ฑ์ ์๋์ผ๋ก ๋ค์ ๋ก๋ํ๋ ๋ช ๋ น์ ์ง์ ํ์ต๋๋ค.
์ธ์ฆ์๋ฅผ ํ๋ํ๋ ์ ์ฒด ๊ณผ์ ์ ์ต๋ 2๋ถ ์ ๋ ์์๋ ์ ์์ผ๋ฏ๋ก ์ค๋จํ์ง ๋ง์ญ์์ค. ๋๋ฉ์ธ ์ ํจ์ฑ ๊ฒ์ฌ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด ๋ช ๋ น์ ๋ค์ ์คํํด ๋ณด์ธ์. ๋ง์ง๋ง์๋ ์ธ์ฆ์๊ฐ ๋ค์ด๋ก๋๋ ์์น๋ฅผ ํ์ธํฉ๋๋ค.
์ด ๊ฒฝ๋ก๋ฅผ ๊ธฐ์ตํด ๋์ธ์. ์ธ์ฆ์๋ฅผ ๋ค๋ฅธ ์๋ฒ์ ๋ณต์ฌํ ๋์ ์น ์๋ฒ ์ค์ ์์ ์ง์ ํด์ผ ํฉ๋๋ค. Nginx ๊ตฌ์ฑ์ ๋ค์ ๋ก๋ํ ๋ ๋ฐ์ํ๋ ์ค๋ฅ์๋ ์ฃผ์๋ฅผ ๊ธฐ์ธ์ด์ง ์์ต๋๋ค. ์์ ํ ๊ตฌ์ฑ๋ ์๋ฒ์์๋ ์ธ์ฆ์๋ฅผ ์ ๋ฐ์ดํธํ ๋ ์ค๋ฅ๊ฐ ๋ํ๋์ง ์์ต๋๋ค.
SSL์์ ์ฐ๋ฆฌ์๊ฒ ๋จ์ ๊ฒ์ ํ์ผ ๊ฒฝ๋ก๋ฅผ ์ ์งํ๋ฉด์ ์์ ๋ ์ธ์ฆ์๋ฅผ ๋ค๋ฅธ ๋ ์๋ฒ์ ๋ณต์ฌํ๋ ๊ฒ๋ฟ์ ๋๋ค. ๊ฐ๊ฐ์ ๋์ผํ ๋๋ ํฐ๋ฆฌ๋ฅผ ๋ง๋ค๊ณ ๋ณต์ฌ๋ณธ์ ๋ง๋ค์ด ๋ณด๊ฒ ์ต๋๋ค.
root@cdn:~# mkdir -p /root/.acme.sh/cdn.sayt.in/
root@cdn:~# scp -r [email protected]:/root/.acme.sh/cdn.sayt.in/* /root/.acme.sh/cdn.sayt.in/
์ธ์ฆ์๋ฅผ ์ ๊ธฐ์ ์ผ๋ก ์ ๋ฐ์ดํธํ๊ธฐ ์ํด ๋ค์ ๋ช ๋ น์ ์ฌ์ฉํ์ฌ ๋ ์๋ฒ ๋ชจ๋์ ์ผ์ผ CRON ์์ ์ ์์ฑํฉ๋๋ค.
scp -r [email protected]:/root/.acme.sh/cdn.sayt.in/* /root/.acme.sh/cdn.sayt.in/ && service nginx reload
์ด ๊ฒฝ์ฐ ์๊ฒฉ ์๋ณธ ์๋ฒ์ ๋ํ ์ ๊ทผ์ ๊ตฌ์ฑํด์ผ ํฉ๋๋ค.
Nginx ์ค์น ๋ฐ ๊ตฌ์ฑ
์ ์ ์ฝํ ์ธ ๋ฅผ ์ ๊ณตํ๊ธฐ ์ํด ์บ์ฑ ํ๋ก์ ์๋ฒ๋ก ๊ตฌ์ฑ๋ Nginx๋ฅผ ์ฌ์ฉํฉ๋๋ค. ํจํค์ง ๋ชฉ๋ก์ ์ ๋ฐ์ดํธํ๊ณ ์ธ ์๋ฒ ๋ชจ๋์ ์ค์นํด ๋ณด๊ฒ ์ต๋๋ค.
root@cdn:~# apt update
root@cdn:~# apt install nginx
๊ธฐ๋ณธ๊ฐ ๋์ ์๋ ์คํฌ์ผ๋ฌ์ ๊ตฌ์ฑ์ ์ฌ์ฉํฉ๋๋ค.
nginx.conf
user www-data;
worker_processes auto;
pid /run/nginx.pid;
events {
worker_connections 4096;
multi_accept on;
}
http {
sendfile on;
tcp_nopush on;
tcp_nodelay on;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
access_log off;
error_log /var/log/nginx/error.log;
gzip on;
gzip_disable "msie6";
gzip_comp_level 6;
gzip_proxied any;
gzip_vary on;
gzip_types text/plain application/javascript text/javascript text/css application/json application/xml text/xml application/rss+xml;
gunzip on;
proxy_temp_path /var/cache/tmp;
proxy_cache_path /var/cache/cdn levels=1:2 keys_zone=cdn:64m max_size=20g inactive=7d;
proxy_cache_bypass $http_x_update;
server {
listen 443 ssl;
server_name cdn.sayt.in;
ssl_certificate /root/.acme.sh/cdn.sayt.in/cdn.sayt.in.cer;
ssl_certificate_key /root/.acme.sh/cdn.sayt.in/cdn.sayt.in.key;
location / {
proxy_cache cdn;
proxy_cache_key $uri$is_args$args;
proxy_cache_valid 90d;
proxy_pass https://sayt.in;
}
}
}
๊ตฌ์ฑ์์ ๋ค์์ ํธ์งํฉ๋๋ค.
- ์ต๋ ํฌ๊ธฐ โ ์บ์ ํฌ๊ธฐ๊ฐ ์ฌ์ฉ ๊ฐ๋ฅํ ๋์คํฌ ๊ณต๊ฐ์ ์ด๊ณผํ์ง ์์
- ๋นํ์ฑ โ ์ก์ธ์ค๋์ง ์์ ์บ์๋ ๋ฐ์ดํฐ์ ์ ์ฅ ์๊ฐ
- ssl_certificate ะธ SSL_certificate_key โ SSL ์ธ์ฆ์ ๋ฐ ํค ํ์ผ์ ๊ฒฝ๋ก
- ํ๋ก์_์บ์_์ ํจ โ ์บ์๋ ๋ฐ์ดํฐ์ ์ ์ฅ ์๊ฐ
- ํ๋ก์ ํจ์ค โ CDN์ด ์บ์ฑ์ ์ํด ํ์ผ์ ์์ฒญํ ์๋ณธ ์๋ฒ์ ์ฃผ์์ ๋๋ค. ์ฐ๋ฆฌ์ ์์์๋ ์ด๊ฒ์ด๋ค sayt.in
๋ณด์๋ค์ํผ ๋ชจ๋ ๊ฒ์ด ๊ฐ๋จํฉ๋๋ค. ์ง์๋ฌธ์ ์ ์ฌ์ฑ์ผ๋ก ์ธํด ์บ์ฑ ์๊ฐ์ ์ค์ ํ๋ ๋ฐ ์ ์ผํ ์ด๋ ค์์ด ๋ฐ์ํ ์ ์์ต๋๋ค. ๋นํ์ฑ ะธ ํ๋ก์_์บ์_์ ํจ. ์ฐ๋ฆฌ์ ์๋ฅผ ์ฌ์ฉํ์ฌ ์ดํด ๋ณด๊ฒ ์ต๋๋ค. ์ด๋ฐ ์ผ์ด ์ผ์ด๋ ๋ ๋นํ์ฑ=7์ผ ะธ Proxy_cache_valid 90์ผ:
- 7์ผ ์ด๋ด์ ์์ฒญ์ด ๋ฐ๋ณต๋์ง ์์ผ๋ฉด ์ด ๊ธฐ๊ฐ์ด ์ง๋ ํ ๋ฐ์ดํฐ๊ฐ ์บ์์์ ์ญ์ ๋ฉ๋๋ค.
- ์์ฒญ์ด 7์ผ๋ง๋ค ํ ๋ฒ ์ด์ ๋ฐ๋ณต๋๋ฉด ์บ์์ ๋ฐ์ดํฐ๋ 90์ผ ํ์ ์ค๋๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผ๋๋ฉฐ ๋ค์ ์์ฒญ ์ Nginx๋ ํด๋น ๋ฐ์ดํฐ๋ฅผ ์ ๋ฐ์ดํธํ์ฌ ์๋ ์๋ฒ์์ ๊ฐ์ ธ์ต๋๋ค.
ํธ์ง์ ๋ง์น๊ณ nginx.conf, ๊ตฌ์ฑ์ ๋ค์ ๋ก๋ํฉ๋๋ค.
root@cdn:~# service nginx reload
์ฐ๋ฆฌ์ CDN์ ์์ ํ ์ค๋น๋์์ต๋๋ค. ์ 15๋ฌ๋ฌ. ์ฐ๋ฆฌ๋ 3๊ฐ ๋๋ฅ์์ ์ ์ ์ง์ ๊ณผ 1TB์ ํธ๋ํฝ(๊ฐ ์์น๋ง๋ค XNUMXTB)์ ๋ฐ์์ต๋๋ค.
CDN ์๋ ํ์ธ
๋ค์ํ ์ง๋ฆฌ์ ์์น์์ CDN์ ๋ํ ping์ ์ดํด๋ณด๊ฒ ์ต๋๋ค. ๋ชจ๋ ํ ์๋น์ค๊ฐ ์ด์ ์ ํฉํฉ๋๋ค.
์์์
์ฃผ์ธ
IP
ํ๊ท ์๊ฐ(๋ฐ๋ฆฌ์ด)
๋
์ผ ๋ฒ ๋ฅผ๋ฆฐ
cdn.sayt.in
199.247.18.199
9.6
๋ค๋๋๋, ์์คํ
๋ฅด๋ด
cdn.sayt.in
199.247.18.199
10.1
ํ๋์ค ํ๋ฆฌ
cdn.sayt.in
199.247.18.199
16.3
์๊ตญ, ๋ฐ๋
cdn.sayt.in
199.247.18.199
14.9
์บ๋๋ค, ํ ๋ก ํ
cdn.sayt.in
149.28.121.123
16.2
๋ฏธ๊ตญ, ์ํ๋์์ค์ฝ
cdn.sayt.in
149.28.121.123
52.7
๋ฏธ๊ตญ, ๋ฌ๋ผ์ค
cdn.sayt.in
149.28.121.123
23.1
๋ฏธ๊ตญ, ์์นด๊ณ
cdn.sayt.in
149.28.121.123
2.6
๋ฏธ๊ตญ, ๋ด์
cdn.sayt.in
149.28.121.123
19.8
์ฑ๊ฐํฌ๋ฅด
cdn.sayt.in
157.230.240.216
1.7
์ผ๋ณธ ๋์ฟ
cdn.sayt.in
157.230.240.216
74.8
ํธ์ฃผ, ์๋๋
cdn.sayt.in
157.230.240.216
95.9
๊ฒฐ๊ณผ๋ ์ข์ต๋๋ค. ์ด์ ๋ฉ์ธ ์ฌ์ดํธ์ ๋ฃจํธ์ ํ
์คํธ ์ด๋ฏธ์ง๋ฅผ ๋ฐฐ์นํด ๋ณด๊ฒ ์ต๋๋ค. ํ
์คํธ.jpg CDN์ ํตํด ๋ค์ด๋ก๋ ์๋๋ฅผ ํ์ธํ์ธ์. ๊ทธ๊ฒ์ ๋งํ๋ค -
CDN ์ง์ ์์ ์บ์๋ฅผ ์ง์ฐ๊ณ ์ถ์ ๊ฒฝ์ฐ๋ฅผ ๋๋นํด ์์ ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํด ๋ณด๊ฒ ์ต๋๋ค.
purge.sh
#!/bin/bash
if [ -z "$1" ]
then
echo "Purging all cache"
rm -rf /var/cache/cdn/*
else
echo "Purging $1"
FILE=`echo -n "$1" | md5sum | awk '{print $1}'`
FULLPATH=/var/cache/cdn/${FILE:31:1}/${FILE:29:2}/${FILE}
rm -f "${FULLPATH}"
fi
์ ์ฒด ์บ์๋ฅผ ์ญ์ ํ๋ ค๋ฉด ์คํํ๋ฉด ๋ฉ๋๋ค. ๋ค์๊ณผ ๊ฐ์ด ๋ณ๋์ ํ์ผ์ ์ง์ธ ์ ์์ต๋๋ค.
root@cdn:~# ./purge.sh /test.jpg
๊ฒฐ๋ก ๋์
๋ง์ง๋ง์ผ๋ก, ํ๋ ์ ๋ฅผ ๊ดด๋กญํ๋ ๊ฐํด๋ฅผ ์ฆ์ ๋ฐ์ด๋์ ์ ์๋ ๋ช ๊ฐ์ง ์ ์ฉํ ํ์ ์ ๊ณตํ๊ณ ์ถ์ต๋๋ค.
- CDN ๋ด๊ฒฐํจ์ฑ์ ๋์ด๋ ค๋ฉด ์๋ฒ ์ฅ์ ๋ฐ์ ์ A ๋ ์ฝ๋๋ฅผ ๋น ๋ฅด๊ฒ ๋ณ๊ฒฝํ๋ ๋ฐ ๋์์ด ๋๋ DNS ์ฅ์ ์กฐ์น๋ฅผ ๊ตฌ์ฑํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ด ์์ ์ ๋๋ฉ์ธ DNS ๋ ์ฝ๋ ์ ์ดํ์์ ์ํ๋ฉ๋๋ค.
- ์ง๋ฆฌ์ ๋ฒ์๊ฐ ๋์ ์ฌ์ดํธ์๋ ์์ฌํ ์ฌ์ง ์์ด ๋ง์ ์์ CDN ํฌ์ธํธ๊ฐ ํ์ํ์ง๋ง ์ง๋์น๊ฒ ์ด๊ดํ์ง๋ ๋ง์ญ์์ค. ์๋ง๋ ์ ๋ฝ, ๋ถ๋ฏธ(๋๋ถ), ๋ถ๋ฏธ(์๋ถ), ์ฑ๊ฐํฌ๋ฅด, ํธ์ฃผ, ํ์ฝฉ, ์ผ๋ณธ ๋ฑ 6~7๊ฐ ์ฅ์์ ์๋ฒ๋ฅผ ๋ฐฐ์นํ๋ค๋ฉด ์ฌ์ฉ์๋ ์ ๋ฃ CDN๊ณผ ํฐ ์ฐจ์ด๋ฅผ ๋๋ผ์ง ๋ชปํ ๊ฒ์ ๋๋ค.
- ๋๋๋ก ํธ์คํ ์ ์ฒด๋ CDN ๋ชฉ์ ์ผ๋ก ์๋ ์๋ฒ ์ฌ์ฉ์ ํ์ฉํ์ง ์์ต๋๋ค. ๋ฐ๋ผ์ ๊ฐ์๊ธฐ ์ฝํ ์ธ ์ ์ก ๋คํธ์ํฌ๋ฅผ ์๋น์ค๋ก ๋ฐฐํฌํ๊ธฐ๋ก ๊ฒฐ์ ํ ๊ฒฝ์ฐ ํน์ ํธ์คํ ๊ณต๊ธ์์ ๊ท์น์ ๋ฏธ๋ฆฌ ์ฝ์ด๋ณด๋ ๊ฒ์ ์์ง ๋ง์ธ์.
- ์ฐ๊ตฌ
์์ค ํต์ ์ง๋ ๋๋ฅ์ด ์ด๋ป๊ฒ ์ฐ๊ฒฐ๋์ด ์๋์ง ์์ํ๊ณ ์ฝํ ์ธ ์ ์ก ๋คํธ์ํฌ๋ฅผ ๊ตฌ์ถํ ๋ ์ด๋ฅผ ๊ณ ๋ คํฉ๋๋ค. - ํ์ธํด ๋ณด์ธ์
์ฌ๋ฌ ๊ณณ์์ ์จ ํ ๊ทํ์ ์๋ฒ์. ์ด๋ ๊ฒ ํ๋ฉด CDN ํฌ์ธํธ์ ๊ฐ์ฅ ๊ฐ๊น์ด ์ง์ญ์ ํ์ธํ๊ณ GeoDNS๋ฅผ ๋ณด๋ค ์ ํํ๊ฒ ๊ตฌ์ฑํ ์ ์์ต๋๋ค. - ์์
์ ๋ฐ๋ผ ํน์ ์บ์ฑ ์๊ตฌ ์ฌํญ์ ๋ง๊ฒ Nginx๋ฅผ ์ฌ์ฉ์ ์ ์ํ๊ณ ์๋ฒ์ ๋ก๋๋ฅผ ๊ณ ๋ คํ๋ ๊ฒ์ด ์ ์ฉํ ์ ์์ต๋๋ค. Nginx ์บ์์ ๊ดํ ๊ธฐ์ฌ๋ ๋์๊ฒ ๋ง์ ๋์์ด ๋์์ต๋๋ค.
์ฌ๊ธฐ์ ๊ณผ๋ถํ์ ์์ ๊ฐ์ํ :์ฌ๊ธฐ์ ะธ์ฌ๊ธฐ์
์ถ์ฒ : habr.com