๐ฌ Nginx๋ฅผ ๊ณต๋ถํ๊ธฐ ์ ์, ๋จผ์ ์น ์๋ฒ๊ฐ ๋ฌด์์ธ์ง๋ถํฐ ์์๋ณด์.
๐ก์น ์๋ฒ(Web server)
- ์น ํ์ด์ง์ ์น ์ ํ๋ฆฌ์ผ์ด์
์ ํด๋ผ์ด์ธํธ์๊ฒ ์ ๊ณตํ๋ ์ญํ ์ ์ํํ๋ ์ปดํจํฐ ํ๋ก๊ทธ๋จ ๋๋ ํ๋์จ์ด
(์ฌ๊ธฐ์ ํด๋ผ์ด์ธํธ๋ ์น ๋ธ๋ผ์ฐ์ ) - ์ ์ ์ฝํ ์ธ (HTML, CSS, JavaScript, ์ด๋ฏธ์ง ๋ฑ)๋ฅผ ํด๋ผ์ด์ธํธ(๋ธ๋ผ์ฐ์ )์ ์ ๊ณต
- ๋ํ์ ์ธ ์น ์๋ฒ๋ก๋ Apache HTTP Server, Nginx ๋ฑ์ด ์์
- ์ด๋ ์น ์๋ฒ๋ ์ ์ ์ธ ํ์ด์ง๋ง ์ฒ๋ฆฌ ๊ฐ๋ฅํ๋ค๋ ํ๊ณ๊ฐ ๋ํ๋ฌ๊ณ ์ด์ WAS๊ฐ ๋ฑ์ฅ
๋๋ณด๊ธฐ
WAS(Web Application Server)
- ์น ์๋ฒ๊ฐ ์ฒ๋ฆฌํ ์ ์๋ ๋์ ์ฝํ ์ธ (์ฌ์ฉ์ ์ธ์ฆ, DB ์กฐํ ๋ฑ)๋ฅผ ๋ด๋น
- ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๋ฐ๋ผ ์ ํ๋ฆฌ์ผ์ด์
๋ก์ง์ ์คํํ๊ณ , ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํธ์์ฉํ์ฌ ๊ฒฐ๊ณผ๋ฅผ ์์ฑํ ํ,
์ด๋ฅผ ์น ์๋ฒ๋ฅผ ํตํด ํด๋ผ์ด์ธํธ๋ก ๋ฐํ
๐ก Apache vs Nginx
- Apache
- 1995๋ ์ ์ถ์๋ ๊ฐ์ฅ ์ค๋๋๊ณ ๋๋ฆฌ ์ฌ์ฉ๋๋ ์น ์๋ฒ
- ํ๋ก์ธ์ค/์ฐ๋ ๋ ๊ธฐ๋ฐ ๋ฉํฐํ๋ก์ธ์ค ๊ตฌ์กฐ๋ฅผ ์ฑํ
- ์์ฒญ ์ฒ๋ฆฌ ๋ฐฉ์์ ๊ฒฐ์ ํ๋ MPM์ ํตํด ์ ์ฐํ ์ํคํ
์ฒ๋ฅผ ์ ๊ณต
๋๋ณด๊ธฐMPM(Multi-Processing Module)
: ํด๋ผ์ด์ธํธ์์ ์์ฒญ์ด ๋ค์ด์ฌ ๋ ์ด๋ค์์ผ๋ก ์ฒ๋ฆฌํ ๊ฒ์ธ์ง์ ๋ํ ๋ชจ๋
- prefork
- ํ๋์ ์์ฒญ์ ๋ํด์ ํ๋์ ์์ ํ๋ก์ธ์ค๊ฐ ํ๋์ ์ฐ๋ ๋๋ฅผ ์ฌ์ฉํด์ ์ฒ๋ฆฌํ๋ ๋ฐฉ์
- ๋์์ ์ฌ๋ฌ๊ฐ์ ์์ฒญ์ด ๋ค์ด์จ๋ค๋ฉด ์์ฑ๋์ด์๋ ์์ ํ๋ก์ธ์ค์์ ๊ฐ ์์ฒญ์ ์ฒ๋ฆฌํ๊ฒ ๋๋ค. ๊ฐ ํ๋ก์ธ์ค๋ค์ ์์์ ๋ ๋ฆฝ์ ์ด๋ฏ๋ก ๋ค๋ฅธ ์์ฒญ์ด ๋ค์ด์ค๊ฑฐ๋ ํ๋ก์ธ์ค ํ๋์ ์ฅ์ ๊ฐ ๋ฐ์ํ๋๋ผ๋ ๋ค๋ฅธ ์์ฒญ์ ์ํฅ์ด ๊ฐ์ง ์๋๋ค๋ ์ด์ ์ด ์๋ค.
- ํ์ง๋ง ํ๋ก์ธ์ค๊ฐ ๋ง์์ง๋ค๋ฉด ํ๋ก์ธ์ค๊ฐ ์ฐจ์งํ๊ณ ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ด ํฌ๊ธฐ ๋๋ฌธ์ ๋ถํ๊ฐ ์ผ์ด๋ ์ ์๋ค๋ ๋จ์ ์ด ์๋ค.
- worker
- ํ๋์ ์์ ํ๋ก์ธ์ค ์์ ์ฌ๋ฌ๊ฐ์ ์ฐ๋ ๋๋ฅผ ์ฌ์ฉํ๊ณ , ๊ฐ ์์ฒญ์ ๊ฐ ์ฐ๋ ๋์์ ์ฒ๋ฆฌ
- ์ ํ๋ ์ฐ๋ ๋ ์๋ฅผ ๋์ด๊ฐ๋ฉด ์๋ก์ด ์์ ํ๋ก์ธ์ค๋ฅผ ์์ฑํด์ ์ฒ๋ฆฌ
- prefork์ ๋นํด ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ ์ฝ๋๋ค๋ ์ฅ์ ์ด ์์ง๋ง, ์ฐ๋ ๋๋ผ๋ฆฌ ์์์ ๊ณต์ ํ๊ธฐ ๋๋ฌธ์ ํ๋ก์ธ์ค๊ฐ ์ฃฝ์ผ๋ฉด ๋ค๋ฅธ ์ฐ๋ ๋๋ค๋ ๊ฐ์ด ์ฃฝ์ ์ ์์
- event
- Nginx์ ์ฑ๊ณต ์ดํ Apache๋ ๋น๋๊ธฐ ์ฒ๋ฆฌ ๋ฐฉ์์ ์ค์์ฑ์ ์ธ์ํ๊ฒ ๋์๊ณ , ์ด๋ฅผ ๋ฐ์ํ Event MPM์ ๊ฐ๋ฐ
- ๊ธฐ์กด prefork(ํ๋ก์ธ์ค ๊ธฐ๋ฐ)๊ณผ worker(์ฐ๋ ๋ ๊ธฐ๋ฐ) MPM์ ๋จ์ ์ ๋ณด์
- ๋น๋๊ธฐ ๋ฐฉ์๊ณผ ์ฐ๋ ๋ ํ์ ํ์ฉํ์ฌ ํด๋ผ์ด์ธํธ ์์ฒญ์ ์ฒ๋ฆฌํ๋ ๊ณ ์ฑ๋ฅ ๋ฐฉ์
- prefork
- ํ๋ก์ธ์ค๋ ์ฐ๋ ๋ ํ๋๊ฐ ํ๋์ ์์ฒญ์ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ผ๋ก ์ธํด, ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋๊ณผ CPU๋ถํ๊ฐ ๊ธ์ฆํ๋ ๋ฌธ์ ์ (C10k(Connection 1000 problem)) ๋ฐ์
- ์ด๋ฌํ ๋ฌธ์ ์ ๋ค์ ํด๊ฒฐ ๊ฐ๋ฅํ Nginx๊ฐ ๋ฑ์ฅ (2004๋ )
๐ก Nginx
- ์ด์ฐฝ๊ธฐ์ Nginx๋ ์์ ํ Apache๋ฅผ ๋์ฒดํ ๋ชฉ์ ์ ์๋์์ผ๋ฉฐ, Apache ์๋ฒ์ ๊ตฌ์กฐ์ ์ธ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ํจ๊ป ์ฌ์ฉ๋๊ธฐ ์์
- ์๋ง์ ๋์ connection์ Nginx๊ฐ ์ ์งํ๊ณ ์ ์ ํ์ผ์ ๋ํ ์์ฒญ์ ์ค์ค๋ก ์ฒ๋ฆฌํ์ง๋ง, ์น ์๋ฒ์ธ Nginx๋ ๋์ ํ์ผ์ ๋ํ ์์ฒญ์ ์ฒ๋ฆฌํ ์ ์์ผ๋ฏ๋ก, Apache ์๋ฒ์ connection์ ํ์ฑํ์ฌ ๋ถํ๋ฅผ ์ค์ฌ์ค

โNginx๋ ์ด๋ป๊ฒ ์๋ง์ ๋์ connection ์ ์ ์งํ ์ ์์๊น
Nginx์ ๋์์๋ฆฌ
- ์ค์ ํ์ผ์ ์ฝ๊ณ , ์ค์ ์ ๋ง๊ฒ worker process๋ฅผ ์์ฑํ๋ master process๋ก ๊ตฌ์ฑ
- Master Process
- Nginx ์๋ฒ์ ๊ด๋ฆฌ์ ์ค์ ์ ๋ด๋นํ๋ ํ๋ก์ธ์ค
- ์ค์ ํด๋ผ์ด์ธํธ ์์ฒญ์ ์ฒ๋ฆฌํ์ง ์์ Master Process
- Worker Process
- ์ค์ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ์ฒ๋ฆฌํ๋ ํ๋ก์ธ์ค
- ํ๊ฐ์ worker process๋ ์ฌ๋ฌ ๊ฐ์ ์์ฒญ์ ๋์์ ์ฒ๋ฆฌ ๊ฐ๋ฅ
- ์์ฑ ์ ์ง์ ๋ Listen ์์ผ์ ๋ฐฐ์ ๋ฐ๊ณ , ๊ทธ ์์ผ์ ์๋ก์ด ํด๋ผ์ด์ธํธ์ ์์ฒญ์ด ๋ค์ด์ค๋ฉด connection์ ํ์ฑํ๊ณ , ์ด connection์ ์ ํด์ง ์๊ฐ(Keep-Alive)๋งํผ ์ ์ง
๋๋ณด๊ธฐListen ์์ผ
- ์์ผ(Socket)์ ๋คํธ์ํฌ ํต์ ์ ์ํด ์๋ฒ์ ํด๋ผ์ด์ธํธ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ํต๋ก
- ์๋ฒ๊ฐ ํน์ ํฌํธ์์ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๋ฐ์ผ๋ ค๋ฉด, ๊ทธ ํฌํธ๋ฅผ ์ด์ด๋๊ณ ๊ธฐ๋ค๋ ค์ผ ํ๋๋ฐ, ์ด๋ ์ฌ์ฉ๋๋ ๊ฒ์ด Listen ์์ผ
- ์ฆ, ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ์ ์ฐ๊ฒฐ ์์ฒญ์ ๋ฐ์ ์ค๋น๊ฐ ๋์ด ์์์ ๋ํ๋ด๋ ์์ผ
- ์ฝ๊ฒ ๋งํด ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ์ฐ๊ฒฐ์ ๊ธฐ๋ค๋ฆฌ๊ณ ์๋ ์ํ๋ผ๋ ์๋ฏธ
- ํด๋ผ์ด์ธํธ๊ฐ ์ฐ๊ฒฐ์ ์๋ํ๋ฉด, ์๋ฒ๋ Listen ์์ผ์ ํตํด ์์ฒญ์ ์๋ฝํ๊ณ , ์๋ก์ด ์์ผ์ ๋ง๋ค์ด์ ํด๋น ํด๋ผ์ด์ธํธ์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์
- ์ฆ, ํด๋ผ์ด์ธํธ์ ์ฐ๊ฒฐ์ด ์ฑ์ฌ๋๋ฉด Listen ์์ผ์ ๋ ์ด์ ์ฌ์ฉ๋์ง ์๊ณ ์๋ก์ด ์์ผ์ด ์ฐ๊ฒฐ์ ๋ด๋น
- worker process๋ ํด๋น connection ํ๋๋ง ๋ด๋นํ์ง ์๊ณ , ํ์ฑ๋ connection์ผ๋ก๋ถํฐ ์๋ฌด๋ฐ ์์ฒญ์ด ์๋ค๋ฉด ์๋ก์ด connection์ ํ์ฑํ๊ฑฐ๋ ์ด๋ฏธ ๋ง๋ค์ด์ง ๋ค๋ฅธ connection์ผ๋ก๋ถํฐ ๋ค์ด์จ ์์ฒญ์ ์ฒ๋ฆฌํจ
- ์ด๋ฌํ connection ํ์ฑ๊ณผ ์ ๊ฑฐ, ๊ทธ๋ฆฌ๊ณ ์๋ก์ด ์์ฒญ์ ์ฒ๋ฆฌํ๋ ๊ฒ์ ์ด๋ฒคํธ(Event) ๋ผ๊ณ ํจ
- Master Process
Nginx์ ํน์ง
- ์ด๋ฒคํธ ๊ธฐ๋ฐ ๋น๋๊ธฐ ์ํคํ
์ฒ๋ฅผ ๋์
ํ์ฌ, ๊ฐ๋ฒผ์ด ๋ฆฌ์์ค๋ก๋ ๋์ ๋์ ์ฐ๊ฒฐ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅ
- ์ด๋ฒคํธ ๊ธฐ๋ฐ ์ฒ๋ฆฌ (Event-Driven)
- ์ด๋ฒคํธ(Event)๋ค์ ํ(Queue) ํ์์ผ๋ก worker process์ ์ ๋ฌ๋๋ฉฐ, ์ด ์ด๋ฒคํธ๋ค์ ํ์ ๋ด๊ธด ์ํ์์ ๋น๋๊ธฐ ์ํ๋ก ๋๊ธฐ
- worker process๋ ์ด ํ์์ ํ๋์ฉ ์ด๋ฒคํธ๋ฅผ ๊บผ๋ด ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ผ๋ก ์์ฒญ์ ์ฒ๋ฆฌ
- ์ด๋ฐ ๋ฐฉ์์ worker process๊ฐ ์ฌ์ง ์๊ณ ์ผ์ ํ๊ธฐ์, ์์ฒญ์ด ์์ ๋ ํ๋ก์ธ์ค๋ฅผ ๋ฐฉ์น์ํค๋ Apache Server๋ณด๋ค ํจ์ฌ ํจ์จ์ ์ผ๋ก ์์์ ์ฌ์ฉํ ์ ์์
- ์ด๋ฒคํธ ๊ธฐ๋ฐ ์ฒ๋ฆฌ (Event-Driven)
- ๋ฆฌ๋ฒ์ค ํ๋ก์ ๋ฐ ๋ก๋ ๋ฐธ๋ฐ์ฑ ์ฌ์ฉ ๊ฐ๋ฅ
- ์ธํฐ๋ท ์ ์์ ํ ๋ ๋ณด์์์ ๋ฌธ์ ๋ก ์ง์ ํต์ ์ ์ฃผ๊ณ ๋ฐ์ ์ ์์ ๊ฒฝ์ฐ, ๊ทธ ์ฌ์ด์์ ๋์ ํต์ ์ ์ํํ๋ ๊ธฐ๋ฅ์ ํ๋ก์(Proxy)๋ผ๊ณ ํจ
- ํฌ์๋ ํ๋ก์(Forward Proxy)
- ํ๋ก์ ์๋ฒํด๋ผ์ด์ธํธ์ ์๋ฒ ์ฌ์ด์์ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๋๋ฆฌํ์ฌ ์๋ฒ์ ํต์ ํ๋ ํ๋ก์ ์๋ฒ
- ๋ฆฌ๋ฒ์ค ํ๋ก์(Reverse Proxy)
- ํด๋ผ์ด์ธํธ์ ์๋ฒ ์ฌ์ด์์ ์๋ฒ์ ์๋ต์ ๋๋ฆฌํ์ฌ ํด๋ผ์ด์ธํธ์ ํต์ ํ๋ ํ๋ก์ ์๋ฒ
- ๋ฆฌ๋ฒ์ค ํ๋ก์๋ฅผ ์ฌ์ฉํ๋ฉด ํด๋ผ์ด์ธํธ์ ์์ฒญ์ด ๋ฐ๋์ ๋ฆฌ๋ฒ์ค ํ๋ก์๋ฅผ ๊ฑฐ์ณ์ผ ํ๋ฏ๋ก, ์์ฒญ์ ์ฌ๋ฌ ์๋ฒ์ ๋ถ์ฐ์ํค๋ ๋ก๋ ๋ฐธ๋ฐ์ฑ์ด ๊ธฐ์ ์ ์ผ๋ก ์ฝ๊ฒ ๊ตฌํ ๊ฐ๋ฅ
- ๋ก๋ ๋ฐธ๋ฐ์ฑ : ํด๋ผ์ด์ธํธ ์์ฒญ์ ์ฌ๋ฌ ์๋ฒ์ ๋ถ๋ฐฐํ์ฌ ํธ๋ํฝ์ ๊ท ๋ฑํ๊ฒ ์ฒ๋ฆฌํ๋๋ก ํ๋ ๊ธฐ์
- ํฌ์๋ ํ๋ก์(Forward Proxy)
- ์ธํฐ๋ท ์ ์์ ํ ๋ ๋ณด์์์ ๋ฌธ์ ๋ก ์ง์ ํต์ ์ ์ฃผ๊ณ ๋ฐ์ ์ ์์ ๊ฒฝ์ฐ, ๊ทธ ์ฌ์ด์์ ๋์ ํต์ ์ ์ํํ๋ ๊ธฐ๋ฅ์ ํ๋ก์(Proxy)๋ผ๊ณ ํจ
- Nginx๋ ์ ์ ๋ฆฌ์์ค๋ฅผ ์บ์ฑํ์ฌ WAS์ ๋ถํ์ํ ์์ฒญ์ด ์ ๋ฌ๋์ง ์๋๋ก ํจ
- ์ด ์ธ์๋ SSL/TLS ์ํธํ, URL ๋ฆฌ๋ค์ด๋ ์
๋ฑ ๋ค์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ฌ ์น ์๋ฒ์ ์ ์ฐ์ฑ๊ณผ ์์ ์ฑ์ ๋์ผ ์ ์์
๐ก Nginx ์ค์ ์ฝ๋ ์์
1. Nginx ๊ธฐ๋ณธ ์ค์
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;;
- user nginx;
- Nginx๊ฐ ์ด๋ค ์ฌ์ฉ์ ๊ถํ์ผ๋ก ์คํ๋ ์ง ์ค์
- ๋ณดํต nginx ์ฌ์ฉ์๋ก ์คํ
- worker_processes auto;
- Nginx๊ฐ ์ฌ์ฉํ ์์ปค ํ๋ก์ธ์ค์ ์๋ฅผ ์ค์
- auto๋ CPU ์ฝ์ด ์์ ๋ง์ถฐ ์๋์ผ๋ก ์ค์
- error_log์ pid: ์๋ฌ ๋ก๊ทธ๋ฅผ ์ ์ฅํ ํ์ผ ๊ฒฝ๋ก์ PID ํ์ผ ๊ฒฝ๋ก๋ฅผ ์ค์ ํฉ๋๋ค.
2. events ๋ธ๋ก
events {
worker_connections 1024;
}
- worker_connections 1024;
- ๊ฐ ์์ปค ํ๋ก์ธ์ค๊ฐ ๋์์ ์ฒ๋ฆฌํ ์ ์๋ ์ต๋ ์ฐ๊ฒฐ ์๋ฅผ ์ค์
- ์ฌ๊ธฐ์๋ 1024๊ฐ์ ์ฐ๊ฒฐ์ ์ฒ๋ฆฌํ ์ ์์
3. http ๋ธ๋ก
: http ๋ธ๋ก ์์์ ์ฌ๋ฌ ์ค์ ์ ํ๋๋ฐ, ์ฌ๊ธฐ์ upstream๊ณผ server ๋ถ๋ถ์ด ์ค์
upstream ๋ธ๋ก
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
# ๋ฐฑ์๋ upstream ์ค์
# upstream myweb-api {
# server api:8080;
# }
# ํ๋ก ํธ์๋ upstream ์ค์
upstream next-server {
server 172.17.0.1:3000; # docker๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค๋ฉด localhost:3000(์น์๋ฒ์ฃผ์)
}
- upstream next-server
- ์ฌ๋ฌ ๋ฐฑ์๋ ์๋ฒ๋ฅผ ์ ์ํ๋ ๋ธ๋ก์ผ๋ก, ์ฌ๊ธฐ์๋ ํ๋์ ์๋ฒ(172.17.0.1:3000)๋ฅผ ์ง์ ํ๊ณ ์๋๋ฐ, ์ด๋ Nginx๊ฐ ์์ฒญ์ ์ ๋ฌํ ์๋ฒ
- ๋ง์ฝ ์ฌ๋ฌ ์๋ฒ๊ฐ ์๋ค๋ฉด upstream์ ์ฌ๋ฌ server ํญ๋ชฉ์ ์ถ๊ฐํ์ฌ ๋ก๋ ๋ฐธ๋ฐ์ฑ์ ํ ์ ์์
server ๋ธ๋ก
server {
listen 80;
# /api ๊ฒฝ๋ก๋ก ์ค๋ ์์ฒญ์ ๋ฐฑ์๋ upstream ์ /api ๊ฒฝ๋ก๋ก ํฌ์๋ฉ
# location /api {
# proxy_pass http://myweb-api/api;
# }
# / ๊ฒฝ๋ก๋ก ์ค๋ ์์ฒญ์ ํ๋ก ํธ์๋ upstream ์ / ๊ฒฝ๋ก๋ก ํฌ์๋ฉ
location / {
proxy_pass http://next-server/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
- listen 80;
- Nginx๊ฐ 80๋ฒ ํฌํธ(HTTP ๊ธฐ๋ณธ ํฌํธ)์์ ์์ฒญ์ ๋ฃ๋๋ก ์ค์
- location /
- / ๊ฒฝ๋ก๋ก ์ค๋ ๋ชจ๋ ์์ฒญ์ ๋ํด ์ฒ๋ฆฌ ๋ฐฉ๋ฒ์ ์ ์
- proxy_pass http://next-server/;
- /๋ก ๋ค์ด์ค๋ ์์ฒญ์ upstream์ ์ ์๋ next-server๋ก ์ ๋ฌ
- ์ฆ, http://172.17.0.1:3000/์ผ๋ก ์์ฒญ์ ๋ณด๋
- proxy_http_version 1.1
- HTTP/1.1์ ์ฌ์ฉํ๋๋ก ์ค์
- proxy_set_header
- ํ๋ก์ ์์ฒญ ์ ํค๋๋ฅผ ์ค์ ํ๋ ๋ถ๋ถ์ผ๋ก, ์์ฒญ์ ์ํํ๊ฒ ์ฒ๋ฆฌํ๊ธฐ ์ํด์ ํ์
- ์๋ฅผ ๋ค์ด, Upgrade์ Connection ํค๋๋ WebSocket ์ฐ๊ฒฐ์ ์ง์ํ๊ธฐ ์ํด ์ค์
- proxy_cache_bypass $http_upgrade;
- WebSocket ์ฐ๊ฒฐ์ ์ํ ์ ๊ทธ๋ ์ด๋ ํค๋๊ฐ ์์ ๊ฒฝ์ฐ ์บ์๋ฅผ ์ฐํํ๋๋ก ์ค์
4. ์๋ ์๋ฆฌ
- ์ฌ์ฉ์๊ฐ Nginx ์๋ฒ์ ์์ฒญ์ ๋ณด๋ธ๋ค. (์๋ฅผ ๋ค์ด, http://localhost:80/ ์ฃผ์๋ก ์ ๊ทผ)
- Nginx๋ location / ๋ธ๋ก์์ proxy_pass๋ก ์ง์ ๋ next-server์ ์์ฒญ์ ์ ๋ฌํ๋ค.
(์ด ๊ฒฝ์ฐ next-server๋ upstream ๋ธ๋ก์์ ์ ์ํ 172.17.0.1:3000 ์๋ฒ) - ํ๋ก ํธ์๋ ์๋ฒ (์: Next.js)๊ฐ 172.17.0.1:3000์์ ์คํ๋๊ณ ์๋ค๊ณ ๊ฐ์ ํ๋ฉด, ์ด ์๋ฒ๊ฐ ์ค์ ์์ฒญ์ ์ฒ๋ฆฌํ๊ณ ๊ฒฐ๊ณผ๋ฅผ Nginx๋ก ๋ค์ ๋ณด๋ธ๋ค.
- Nginx๋ ๋ฐ์ ์๋ต์ ์ฌ์ฉ์์๊ฒ ์ ๋ฌํ๋ค.
5. ์ค์ ์์ ์ค์ํ ๋ถ๋ถ
- proxy_pass
- ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ํน์ ์๋ฒ(์ฌ๊ธฐ์๋ next-server)๋ก ์ ๋ฌํ๋ ์ญํ ์ ํจ
- upstream
- ์ฌ๋ฌ ์๋ฒ๋ฅผ ๋ฌถ์ด์ ํ๋์ ์๋ฒ์ฒ๋ผ ์ฌ์ฉํ๋ ค๋ ์ค์ ์ผ๋ก, ์ฌ๋ฌ ๊ฐ์ ์๋ฒ๋ฅผ ์ ์ํ์ฌ ๋ก๋ ๋ฐธ๋ฐ์ฑ์ ํ ์ ์์
- proxy_set_header:
- ํด๋ผ์ด์ธํธ ์์ฒญ์ ์ผ๋ถ ํค๋๋ฅผ ๋ฐฑ์๋ ์๋ฒ๋ก ์ ๋ฌํ๋ ๋ฐ ์ฌ์ฉ
์๋ฅผ ๋ค์ด, WebSocket์ ์ง์ํ๋ ค๋ฉด Upgrade ๋ฐ Connection ํค๋๋ฅผ ์ค์ ํด์ผ ํจ
- ํด๋ผ์ด์ธํธ ์์ฒญ์ ์ผ๋ถ ํค๋๋ฅผ ๋ฐฑ์๋ ์๋ฒ๋ก ์ ๋ฌํ๋ ๋ฐ ์ฌ์ฉ
'Study > Web, Server' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํ์ด์ฌ ์น ํ๋ ์์ํฌ (0) | 2025.04.29 |
---|