์ •์  ๋ชจ๋“ˆ vs ๋™์  ๋ชจ๋“ˆ

์ •์  ๋ชจ๋“ˆ: Nginx ์ปดํŒŒ์ผ ์‹œ ์†Œ์Šค์ฝ”๋“œ์— ํฌํ•จ๋˜์–ด ํ•จ๊ป˜ ๋นŒ๋“œ๋˜๋ฉฐ, ํ•ญ์ƒ ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œ๋˜์–ด ์žˆ์–ด์„œ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„๋„ ๋ฆฌ์†Œ์Šค๋ฅผ ์ฐจ์ง€ํ•œ๋‹ค. ์ •์ ๋ชจ๋“ˆ์€ ์ ์šฉ ์‹œ ๋ฌด์ค‘๋‹จ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

๋™์  ๋ชจ๋“ˆ: ๋ณ„๋„์˜ .so ํŒŒ์ผ๋กœ ์ปดํŒŒ์ผ๋˜์–ด ํ•„์š”ํ•  ๋•Œ๋งŒ ๋กœ๋“œํ•˜๋ฉฐ ์œ ์—ฐ์„ฑ์ด ๋†’๊ณ  ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ์ ์ด๋‹ค. ๋™์ ๋ชจ๋“ˆ์€ ์ ์šฉ ์‹œ ๋ฌด์ค‘๋‹จ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

 

๋™์ ๋ชจ๋“ˆ ์˜ˆ์‹œ

 

  • ngx_http_image_filter_module: ์ด๋ฏธ์ง€ ์ฒ˜๋ฆฌ
  • ngx_http_geoip_module: IP ๊ธฐ๋ฐ˜ ์ง€๋ฆฌ ์ •๋ณด
  • ngx_http_xslt_module: XML/XSLT ๋ณ€ํ™˜
  • ngx_stream_module: TCP/UDP ๋กœ๋“œ๋ฐธ๋Ÿฐ์‹ฑ
  • ngx_http_perl_module: Perl ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰

 

so ํŒŒ์ผ์€ ๋ญ˜๊นŒ?

.so ํŒŒ์ผ์€ Shared Object ํŒŒ์ผ์ด๋ฉฐ, ๋ฆฌ๋ˆ…์Šค/์œ ๋‹‰์Šค ์‹œ์Šคํ…œ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋™์  ๋งํฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(Dynamic Link Library) ํŒŒ์ผ์ด๋‹ค. ๋™์ ๋ชจ๋“ˆ ์ตœ์ข… ํŒŒ์ผ์ด๋ผ๊ณ  ๋ณด๋ฉด ๋œ๋‹ค.

 

๋™์ ๋ชจ๋“ˆ์˜ ์žฅ์ 

  • ๋Ÿฐํƒ€์ž„์— ๋กœ๋“œ: ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์ค‘์— ํ•„์š”ํ•  ๋•Œ ๋ฉ”๋ชจ๋ฆฌ์— ์ ์žฌ
  • ์ฝ”๋“œ ๊ณต์œ : ์—ฌ๋Ÿฌ ํ”„๋กœ๊ทธ๋žจ์ด ๋™์ผํ•œ .so ํŒŒ์ผ์„ ๊ณต์œ ํ•ด์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  • ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ: ์ค‘๋ณต ์ฝ”๋“œ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ํ•œ ๋ฒˆ๋งŒ ๋กœ๋“œ
  • ๋…๋ฆฝ์  ์—…๋ฐ์ดํŠธ: ๋ฉ”์ธ ํ”„๋กœ๊ทธ๋žจ ์žฌ์ปดํŒŒ์ผ ์—†์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋งŒ ๊ต์ฒด ๊ฐ€๋Šฅ
  • ๋ฌด์ค‘๋‹จ ๋ฐฐํฌ ๊ฐ€๋Šฅ

 

1. ๋™์ ๋ชจ๋“ˆ ์†Œ์Šค ๋‹ค์šด๋กœ๋“œ

nginx version์„ ํ™•์ธํ•ด์„œ ์ด์™€ ๋งž๋Š” ๋ชจ๋“ˆ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ๋‹ค์šด๋ฐ›์•„ ์„œ๋ฒ„์— ์—…๋กœ๋“œ ํ•œ ๋’ค ํŒŒ์ผ์˜ ์••์ถ•์„ ํ‘ผ๋‹ค.

๋‚˜๋Š” nginx version์ด 1.28์ด๋ผ์„œ ํ•ด๋‹น tar.gz ํŒŒ์ผ์„ ๋‹ค์šด๋ฐ›์•˜๋‹ค. (๋ฒ„์ „์ด ๋งž์ง€ ์•Š๋Š”๋‹ค๋ฉด nignx -t์—์„œ ์˜ค๋ฅ˜ ๋ฐœ์ƒํ•˜๊ธฐ์— ๋ฒ„์ „ ํ™•์ธ ํ•„์ˆ˜!)

C ํŒŒ์ผ(.c)๊ณผ ํ—ค๋” ํŒŒ์ผ(.h), config ํŒŒ์ผ ๋“ฑ์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค.

๊ณต์‹ ๋‹ค์šด๋กœ๋“œ ์‚ฌ์ดํŠธ: https://nginx.org/download/

tar -xzvf nginx-1.28.0.tar.gz

 

 

2. ๋™์ ๋ชจ๋“ˆ ๋นŒ๋“œ

๋™์ ๋ชจ๋“ˆ์„ ๋นŒ๋“œํ• ๋•Œ ๊ฐ์ข… ์˜ค๋ฅ˜๊ฐ€ ๋‚˜๋Š”๋ฐ ๋ณดํ†ต ์˜์กด์„ฑ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์„ค์น˜๋˜์–ด์žˆ์ง€ ์•Š์•„ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.

์–ด๋–ค ๋ชจ๋“ˆ์ธ์ง€์— ๋”ฐ๋ผ ํ•„์š”ํ•œ ์˜์กด์„ฑ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๊ฐ๊ฐ ๋‹ค๋ฅด๋ฉฐ, ์˜ค๋ฅ˜ ๋ฌธ๊ตฌ์—์„œ ๋‚˜์˜ค๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์„ค์น˜ํ•˜๋ฉด ๋œ๋‹ค.

# Nginx ์†Œ์Šค ๋””๋ ‰ํ† ๋ฆฌ๋กœ ์ด๋™
cd /usr/local/src/nginx-1.28.0

# configure ์‹คํ–‰ (๋™์  ๋ชจ๋“ˆ ์ถ”๊ฐ€)
# ์˜์กด์„ฑ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค์น˜๊ฐ€ ๋ชจ๋‘ ์™„๋ฃŒ๋˜์–ด์•ผ ์˜ค๋ฅ˜์—†์ด ์‹คํ–‰ ๊ฐ€๋Šฅ
./configure --with-compat --with-http_xslt_module=dynamic

# ๋ชจ๋“ˆ์— ๋”ฐ๋ผ ์‹คํ–‰ ๋ฌธ๋ฒ• ํ™•์ธ
./configure --help | grep {๋ชจ๋“ˆ๋ช…}

# ๋ชจ๋“ˆ๋งŒ ๋นŒ๋“œ
# ์ด ๋ช…๋ น์œผ๋กœ .so ํŒŒ์ผ(๊ณต์œ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ)์ด ์ƒ์„ฑ 
# ๋นŒ๋“œ๋œ .so ํŒŒ์ผ์€ objs/ ๋””๋ ‰ํ† ๋ฆฌ์— ์ƒ์„ฑ
make modules

# ๋นŒ๋“œ๋œ .so ํŒŒ์ผ์„ ๋ชจ๋“ˆ ๋””๋ ‰ํ† ๋ฆฌ๋กœ ๋ณต์‚ฌ
# ๋ชจ๋“ˆ์„ ๋นŒ๋“œํ•˜๋ฉด nginx-1.28.0/objs ๋””๋ ‰ํ† ๋ฆฌ ๋ฐ‘์— so ํŒŒ์ผ์ด ์ƒ์„ฑ๋œ๋‹ค.
cp objs/ngx_http_geoip2_module.so /usr/lib64/nginx/modules/

 

โญ ๋™์ ๋ชจ๋“ˆ ๋นŒ๋“œ ์˜ต์…˜ ์„ค๋ช…

./configure

Nginx ๋นŒ๋“œ ํ™˜๊ฒฝ์„ ์„ค์ •ํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ์ž…๋‹ˆ๋‹ค. Makefile์„ /usr/local/src/nginx-1.28.0 ๋””๋ ‰ํ† ๋ฆฌ ์•ˆ์— ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

--with-compat

ํ˜ธํ™˜์„ฑ ๋ชจ๋“œ ํ™œ์„ฑํ™”

  • Nginx ๋ฐ”์ด๋„ˆ๋ฆฌ์™€ ๋™์  ๋ชจ๋“ˆ ๊ฐ„์˜ ABI(Application Binary Interface) ํ˜ธํ™˜์„ฑ์„ ๋ณด์žฅ ( ์ด๋ฏธ ์„ค์น˜๋œ Nginx์— ๋‚˜์ค‘์— ๋™์  ๋ชจ๋“ˆ๋งŒ ๋”ฐ๋กœ ์ถ”๊ฐ€ํ•  ๋•Œ ํ•„์ˆ˜ ์˜ต์…˜)
  • ์ด๊ฒŒ ์—†์œผ๋ฉด ๋ชจ๋“ˆ์ด ์ œ๋Œ€๋กœ ๋กœ๋“œ๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Œ

--with-http_xslt_module=dynamic

XSLT ๋ชจ๋“ˆ์„ ๋™์  ๋ชจ๋“ˆ๋กœ ๋นŒ๋“œ

  • ๋ชจ๋“ˆ์— ๋”ฐ๋ผ์„œ --with-{๋ชจ๋“ˆ๋ช…}=dynamic ํ˜•์‹
  • --with-http_xslt_module: XSLT ๋ชจ๋“ˆ ํฌํ•จ
  • =dynamic: ์ •์ ์ด ์•„๋‹Œ ๋™์  ๋ชจ๋“ˆ(.so ํŒŒ์ผ)๋กœ ๋นŒ๋“œํ•˜๋ผ๋Š” ์˜๋ฏธ
  • =dynamic์„ ์•ˆ ๋ถ™์ด๋ฉด ์ •์  ๋ชจ๋“ˆ๋กœ ์ปดํŒŒ์ผ๋˜๋ฉฐ, make modules์ด ์•ˆ ๋จนํžˆ๊ณ , so ํŒŒ์ผ๋„ ์•ˆ ๋งŒ๋“ค์–ด์ง„๋‹ค.

3. ๋ชจ๋“ˆ ๋กœ๋“œ ๋ฐ ์‚ฌ์šฉ

# nginx.conf ํŒŒ์ผ ์ˆ˜์ •
vi /etc/nginx/nginx.conf

# nginx.conf ํŒŒ์ผ ์ตœ์ƒ๋‹จ์— ์ถ”๊ฐ€
# ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•จ
include /usr/share/nginx/modules/*.conf;

 

/usr/share/nginx/modules/ ์•ˆ์— conf ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด์„œ ๋ชจ๋“ˆ์„ ๋กœ๋“œํ•œ๋‹ค.

# conf ํŒŒ์ผ ์ƒ์„ฑ ํ›„ ํŒŒ์ผ ์•ˆ์— load_module ์ถ”๊ฐ€
vi /usr/share/nginx/modules/mod-http-image-filter.conf

# ํŒŒ์ผ ์•ˆ์— ์ถ”๊ฐ€
load_module "/usr/lib64/nginx/modules/ngx_http_image_filter_module.so";

 

4. ์„ค์ • ํ™•์ธ ๋ฐ ์žฌ์‹œ์ž‘

# ์„ค์ • ํŒŒ์ผ ๋ฌธ๋ฒ• ๊ฒ€์‚ฌ
nginx -t

# Nginx ์žฌ์‹œ์ž‘ (๋ฌด์ค‘๋‹จ)
systemctl reload nginx

 

์„ค์ •ํŒŒ์ผ ๋ฌธ๋ฒ• ๊ฒ€์‚ฌ ์‹œ, ์•„๋ž˜์™€ ๊ฐ™์ด OK์™€ successful์„ ํ™•์ธํ–ˆ๋‹ค๋ฉด ์žฌ์‹œ์ž‘ํ•œ๋‹ค.

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

 

 

์ •์ /๋™์ ์— ๋”ฐ๋ฅธ Nginx ์žฌ์‹œ์ž‘ ๋ฐฉ๋ฒ•

# ์ •์ ๋ชจ๋“ˆ: Nginx ๋ฐ”์ด๋„ˆ๋ฆฌ ์ž์ฒด๊ฐ€ ๊ต์ฒด๋˜๋ฏ€๋กœ ์žฌ์‹œ์ž‘ ํ•„์š” (์ค‘์ง€ ๋ฐœ์ƒ)
systemctl restart nginx  

# ๋™์ ๋ชจ๋“ˆ: .so ํŒŒ์ผ๋งŒ ๊ต์ฒด ํ›„ reload๋งŒ์œผ๋กœ ๊ฐ€๋Šฅ (๋ฌด์ค‘๋‹จ)
systemctl reload nginx

์šฐ์„  Nginx ์„ค์ • ํŒŒ์ผ์€ ํฌ๊ฒŒ 2๊ฐ€์ง€๋กœ ๋‚˜๋‰œ๋‹ค.

๊ตฌ์กฐ๋ฅผ ๋‚˜๋ˆ”์œผ๋กœ์จ ์šด์˜ ์˜ํ–ฅ๋„๋ฅผ ์ค„์ด๊ณ  ์„ค์ • ์ถฉ๋Œ ๋ฐฉ์ง€, ์„œ๋น„์Šค ์ถ”๊ฐ€/์‚ญ์ œ๊ฐ€ ์‰ฌ์šฐ๋ฉฐ ๋กค๋ฐฑ์ด ์‰ฝ๋‹ค.

 

nginx ์„ค์ • ๊ตฌ์กฐ

/etc/nginx/
โ”œโ”€โ”€ nginx.conf          # ๋ฉ”์ธ ์„ค์ • ํŒŒ์ผ
โ”œโ”€โ”€ conf.d/                # ์„œ๋ฒ„๋ณ„ ์„ค์ • include
โ”‚   โ”œโ”€โ”€ default.conf
โ”‚   โ””โ”€โ”€ api.conf

โ”‚   โ””โ”€โ”€ web.conf

 

 

์ˆ˜์ • ์‹œ ์˜ํ–ฅ๋„ ํ™•์ธ

  • nginx.conf ์ˆ˜์ • → nginx ์ „์ฒด ์˜ํ–ฅ
  • conf.d/*.conf ์ˆ˜์ • → ํ•ด๋‹น ์„œ๋น„์Šค๋งŒ ์˜ํ–ฅ

 

 

1. ๋ฉ”์ธ ์„ค์ • (Main Config) - /etc/nginx/nginx.conf 

-> nginx ์ „์ฒด ํ”„๋กœ์„ธ์Šค/๋™์ž‘ ๋ฐฉ์‹์„ ์ •์˜ํ•˜๋Š” ๋ฃจํŠธ ์„ค์ •

 

1-1. ์ „์—ญ(Global) ์„ค์ •

user  nginx;
worker_processes  auto;
error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

 

  • user : nginx ํ”„๋กœ์„ธ์Šค ์‹คํ–‰ ๊ณ„์ •
  • worker_processes : ์›Œ์ปค ํ”„๋กœ์„ธ์Šค ๊ฐœ์ˆ˜
  • error_log : ์—๋Ÿฌ ๋กœ๊ทธ
  • pid : PID ํŒŒ์ผ

2-2. ์ด๋ฒคํŠธ ๋ธ”๋ก

๋™์‹œ์— ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅํ•œ ์ปค๋„ฅ์…˜ ์ˆ˜

events {
    worker_connections  1024;
}

 

2-3. http ๋ธ”๋ก

HTTP ์„œ๋ฒ„ ์ „์—ญ ์„ค์ •

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format main '$remote_addr - $remote_user ...';
    access_log /var/log/nginx/access.log main;

    sendfile        on;
    keepalive_timeout 65;

    include /etc/nginx/conf.d/*.conf; //์„œ๋น„์Šค ์„ค์ •ํŒŒ์ผ include
    
    map $http_upgrade $connection_upgrade {
    default upgrade;   # 1์ˆœ์œ„: ์•„๋ฌด๊ฒƒ๋„ ๋งค์นญ ์•ˆ ๋˜๋ฉด ์ด๊ฑฐ
    '' close;          # 2์ˆœ์œ„: ๋นˆ ๋ฌธ์ž์—ด์ด๋ฉด ์ด๊ฑฐ
    }
}
  • MIME ํƒ€์ž…
  • ๋กœ๊ทธ ํฌ๋งท
  • gzip
  • proxy ๊ด€๋ จ ๊ธฐ๋ณธ๊ฐ’
  • SSL ๊ธฐ๋ณธ๊ฐ’
  • upstream ์ •์˜ ๊ฐ€๋Šฅ
  • ์ค‘์š”! ์„œ๋น„์Šค๋ณ„ ์„ค์ •์„ ์ง์ ‘ ๋‹ค ๋„ฃ๊ธฐ๋ณด๋‹ค๋Š” include ๋กœ ๋ถ„๋ฆฌํ•˜๋Š” ๊ตฌ์กฐ

 

ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…

  ์ผ๋ฐ˜ HTTP WebSocket
์—ฐ๊ฒฐ ์š”์ฒญํ•  ๋•Œ๋งˆ๋‹ค ์ƒˆ๋กœ ์—ฐ๊ฒฐ ํ•œ ๋ฒˆ ์—ฐ๊ฒฐํ•˜๋ฉด ๊ณ„์† ์œ ์ง€
๋ฐฉํ–ฅ ํด๋ผ์ด์–ธํŠธ → ์„œ๋ฒ„ (๋‹จ๋ฐฉํ–ฅ) ์–‘๋ฐฉํ–ฅ ์ž์œ ๋กญ๊ฒŒ
์‚ฌ์šฉ ์˜ˆ ์›นํŽ˜์ด์ง€, REST API, ์ด๋ฏธ์ง€ ๋กœ๋”ฉ ์ฑ„ํŒ…, ์•Œ๋ฆผ, ๊ฒŒ์ž„, ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ

 

๋งŒ์•ฝ์— WebSoket์„ ์‚ฌ์šฉํ•˜๋Š” ์‹œ์Šคํ…œ์ด๋ผ๋ฉด ์„œ๋น„์Šค ์„ค์ • ํŒŒ์ผ ์•ˆ์— ํ•ด๋‹น Proxy header๊ฐ€ ๋“ค์–ด์žˆ์„๊ฒƒ์ด๋‹ค.

       proxy_set_header Upgrade $http_upgrade;
       proxy_set_header Connection $connection_upgrade;

 

๊ทธ๋ ‡๋‹ค๋ฉด ๋ฉ”์ธ ์„ค์ • ํŒŒ์ผ์˜ http ๋ธ”๋ก ์•ˆ์— ์•„๋ž˜ ์ฝ”๋“œ๊ฐ€ ๋“ค์–ด๊ฐ€์•ผํ•˜๋ฉฐ ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์˜ค๋ฅ˜ ๋ฐœ์ƒํ•œ๋‹ค.

    map $http_upgrade $connection_upgrade {
    default upgrade;   # 1์ˆœ์œ„: ์•„๋ฌด๊ฒƒ๋„ ๋งค์นญ ์•ˆ ๋˜๊ฑฐ๋‚˜ ๋นˆ ๋ฌธ์ž์—ด์ด ์•„๋‹ˆ๋ฉด ์ด๊ฑฐ
    '' close;          # 2์ˆœ์œ„: ๋นˆ ๋ฌธ์ž์—ด์ด๋ฉด ์ด๊ฑฐ
    }

 

์ผ€์ด์Šค 1: WebSocket ์š”์ฒญ

  • $http_upgrade = "websocket" (Upgrade ํ—ค๋” ๊ฐ’)
  • ๋งค์นญ ํ™•์ธ:
    • close ๋งค์นญ โŒ (๋นˆ ๋ฌธ์ž์—ด ์•„๋‹˜)
    • default upgrade ๋งค์นญ โญ•
  • ๊ฒฐ๊ณผ: $connection_upgrade = "upgrade"

์ผ€์ด์Šค 2: ์ผ๋ฐ˜ HTTP ์š”์ฒญ

  • $http_upgrade = "" (๋นˆ ๋ฌธ์ž์—ด, Upgrade ํ—ค๋” ์—†์Œ)
  • ๋งค์นญ ํ•™์ธ:
    • close ๋งค์นญ โญ• (์—ฌ๊ธฐ์„œ ๋!)
  • ๊ฒฐ๊ณผ: $connection_upgrade = "close"
  • default๋Š” ํ™•์ธ์กฐ์ฐจ ์•ˆ ํ•จ

์ผ€์ด์Šค 3: ์ด์ƒํ•œ ๊ฐ’์ด ๋“ค์–ด์˜จ ๊ฒฝ์šฐ

  • $http_upgrade = "something-weird"
  • ๋งค์นญ ํ™•์ธ:
    • close ๋งค์นญ โŒ (๋นˆ ๋ฌธ์ž์—ด ์•„๋‹˜)
    • default upgrade ๋งค์นญ โญ•
  • ๊ฒฐ๊ณผ: $connection_upgrade = "upgrade"

 

2. ์„œ๋น„์Šค ์„ค์ • (Service / Virtual Host) - /etc/nginx/conf.d/*.conf

HTTPS + WebSocket ์˜ˆ์‹œ

์•„๋ž˜ ์ฝ”๋“œ๋Š” nginx๋ฅผ proxy server๋กœ ์‚ฌ์šฉํ•œ ์˜ˆ์‹œ์ด๋‹ค.

server {
    listen 443 ssl;
    server_name chat.example.com;
    
    # SSL ํ•ด๋…์ฒ˜๋ฆฌ๋กœ HTTPS ์—ฌ๊ธฐ์„œ ์ฒ˜๋ฆฌ!
    ssl_certificate /etc/nginx/ssl/cert.pem;
    ssl_certificate_key /etc/nginx/ssl/key.pem;
    
    location / {
        proxy_pass http://localhost:8080; # proxy server
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade; # HTTP/WebSocket ์ฒ˜๋ฆฌ
        proxy_set_header Connection $connection_upgrade; # HTTP/WebSocket ์ฒ˜๋ฆฌ
        proxy_set_header Host $host;
    }
}

 

 

1. HTTPS ์š”์ฒญ (์ผ๋ฐ˜ ์›นํŽ˜์ด์ง€)

๋ธŒ๋ผ์šฐ์ € → https://chat.example.com (443 ํฌํŠธ)
         → nginx (SSL ํ•ด๋…)
         → http://localhost:8080 (ํ‰๋ฌธ HTTP๋กœ ์ „๋‹ฌ)

 

2. WebSocket ์—ฐ๊ฒฐ (wss://)

๋ธŒ๋ผ์šฐ์ € → wss://chat.example.com (443 ํฌํŠธ)
         → nginx (SSL ํ•ด๋… + WebSocket ์—…๊ทธ๋ ˆ์ด๋“œ)
         → ws://localhost:8080 (ํ‰๋ฌธ WebSocket์œผ๋กœ ์ „๋‹ฌ)

 

Proxy Server๋ž€ ๋ญ˜๊นŒ?

-> ์ค‘๊ฐ„ ๋‹ค๋ฆฌ ์—ญํ• ์„ ํ•ด์ฃผ๋Š” ์„œ๋ฒ„์ด๋‹ค.

-> Apache (with mod_proxy), Caddy, Envoy ๊ฐ™์€ Proxy Server๊ฐ€ ์กด์žฌํ•œ๋‹ค.

 

์‚ฌ์šฉ์ž ๋ธŒ๋ผ์šฐ์ € → nginx (80ํฌํŠธ) → Node.js ์•ฑ (3000ํฌํŠธ)

 

์‚ฌ์šฉ์ž๋Š” 80, 443 ์ธํ„ฐ๋„ท ํฌํŠธ๋งŒ ์•Œ๊ณ  ์ ‘์†ํ•˜๋ฉด ์•Œ์•„์„œ ์—ฌ๋Ÿฌ ์„œ๋ฒ„์˜ ํฌํŠธ๋กœ ์—ฐ๊ฒฐ์‹œ์ผœ์ค€๋‹ค.

 

  • ๋ณด์•ˆ: ์‹ค์ œ ์„œ๋ฒ„(3000ํฌํŠธ) ์ง์ ‘ ๋…ธ์ถœ ์•ˆ ํ•จ
  • ๋กœ๋“œ๋ฐธ๋Ÿฐ์‹ฑ: ์—ฌ๋Ÿฌ ์„œ๋ฒ„์— ํŠธ๋ž˜ํ”ฝ ๋ถ„์‚ฐ
  • SSL ์ฒ˜๋ฆฌ: nginx๊ฐ€ HTTPS ์ฒ˜๋ฆฌ, ์•ฑ์€ HTTP๋งŒ
  • ์ •์  ํŒŒ์ผ: ์ด๋ฏธ์ง€ ๊ฐ™์€ ๊ฑด nginx๊ฐ€ ์ง์ ‘ ์„œ๋น™

์™œ nginx๊ฐ€ ์ •์  ํŒŒ์ผ ์„œ๋น™์— ๋น ๋ฅผ๊นŒ?

-> ์ด๋ฏธ์ง€ ์š”์ฒญ → nginx๊ฐ€ ๋””์Šคํฌ์—์„œ ๋ฐ”๋กœ ์ฝ์–ด์„œ ์ „์†กํ•˜๊ธฐ ๋•Œ๋ฌธ!

 

  • ์—„์ฒญ ๋น ๋ฆ„: C๋กœ ์ž‘์„ฑ๋จ, ํŒŒ์ผ ์ฝ๊ธฐ์— ์ตœ์ ํ™”
  • ๋ฐฑ์—”๋“œ ๋ถ€ํ•˜ ๊ฐ์†Œ: Node.js๊ฐ€ ํŒŒ์ผ ์ฒ˜๋ฆฌ ์•ˆ ํ•ด๋„ ๋จ ( ์ด๋ฏธ์ง€ ์š”์ฒญ → nginx → Node.js → ํŒŒ์ผ ์ฝ๊ธฐ → nginx → ๋ธŒ๋ผ์šฐ์ € ) 
  • ํšจ์œจ์  ๋ฉ”๋ชจ๋ฆฌ: ํŒŒ์ผ ์บ์‹ฑ, sendfile ์‹œ์Šคํ…œ์ฝœ ์‚ฌ์šฉ

 

 

'Server > Nginx' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

nginx ๋™์ ๋ชจ๋“ˆ(dynamic module) ๋นŒ๋“œํ•ด์„œ ์ ์šฉํ•˜๊ธฐ  (0) 2026.01.25

+ Recent posts