728x90
λ°˜μ‘ν˜•

20μž₯ λ¦¬λ²„μŠ€ ν”„λ‘μ‹œλ₯Ό μ΄μš©ν•΄ μ»¨ν…Œμ΄λ„ˆ HTTP νŠΈλž˜ν”½ μ œμ–΄ν•˜κΈ°

20.1 λ¦¬λ²„μŠ€ ν”„λ‘μ‹œλž€?

  • μ—¬λŸ¬ μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μœΌλ‘œ ν†΅ν•˜λŠ” κ΄€λ¬Έ 역할을 μˆ˜ν–‰.
  • λ¦¬λ²„μŠ€ ν”„λ‘œμ‹œλŠ” 포트λ₯Ό μ™ΈλΆ€λ‘œ κ³΅κ°œν•œ μœ μΌν•œ μ»¨ν…Œμ΄λ„ˆ 이닀.
  • μ™ΈλΆ€μ—μ„œ λ“€μ–΄μ˜€λŠ” λͺ¨λ“  νŠΈλž˜ν”½μ€ λ¨Όμ € λ¦¬λ²„μŠ€ ν”„λ‘μ‹œλ₯Ό κ±°μΉ˜λ―€λ‘œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 포트λ₯Ό μ™ΈλΆ€λ‘œ κ³΅κ°œν•˜μ§€ μ•Šμ•„λ„ λœλ‹€.
  • μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ 응닡 λ‚΄μš©μ„ μΊμ‹œν•΄ λ‘μ—ˆλ‹€κ°€ μ μ ˆν•˜κ²Œ κ°€κ³΅ν•΄μ„œ ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ 전달.
  • μŠ€μΌ€μΌλ§, μ—…λ°μ΄νŠΈ λ³΄μ•ˆ λ©΄μ—μ„œ 유리.
  • λ¦¬λ²„μŠ€ ν”„λ‘μ‹œλ₯Ό κ²½λŸ‰ μ»¨ν…Œμ΄λ„ˆλ‘œ μ‹€ν–‰ν•˜κ²Œ λ˜λ©΄μ„œ λͺ¨λ“  ν™˜κ²½μ—μ„œ λ™μΌν•œ ν”„λ‘μ‹œ 섀정을 μ‚¬μš©ν•  수 μžˆλ‹€.

Nginx ν”„λ‘μ‹œ μ„€μ •ν•˜κΈ°

  • Nginx κ°€ λ‹¨μˆœνžˆ μš”μ²­μ„ μ „λ‹¬ν•˜λŠ” 맀개자 역할을 ν•œλ‹€.
  • μš”μ²­μ„ 받을 λ•Œλ§ˆλ‹€ 이λ₯Ό μ²˜λ¦¬ν•˜λŠ” μ»¨ν…Œμ΄λ„ˆ(upstream) 을 ν˜ΈμΆœν•œλ‹€.
  • 응닡을 λ‹€μ‹œ ν΄λΌμΈμ–΄νŠΈ (downstream) 둜 μ „λ‹¬ν•œλ‹€.
server {
	server_name whoami.local;  # 도메인
	
	location / {
		proxy_pass <http://whoami>;  # μ½˜ν…μΈ  μ£Όμ†Œ
		proxy_set_header Host $host; # 호슀트 정보λ₯Ό μ½˜ν…μΈ  μœ„μΉ˜λ‘œ μ„€μ •
		add_header X-Host $hostname; # μƒλ‹΅μ˜ 호슀트 정보λ₯Ό ν”„λ‘μ‹œ μ΄λ¦„μœΌλ‘œ λ³€κ²½
	}
}
  • λ¦¬λ²„μŠ€ ν”„λ‘μ‹œλŠ” HTTP 둜 μ œκ³΅λ˜λŠ” μ½˜ν…μΈ λΌλ©΄ 무엇이든 μ‚¬μš© κ°€λŠ₯ν•˜λ‹€.
  • Nginx λŠ” λ‹¨μˆœνžˆ μš”μ²­μ„ μ „λ‹¬ν•˜λŠ” 맀개자 역할이닀.
  • λͺ¨λ“  μ• ν”Œλ¦¬μΌ€μ΄μ…˜ νŠΈλž˜ν”½μ΄ ν”„λ‘μ‹œλ₯Ό κ²½μœ ν•˜λ―€λ‘œ μ„€μ •μ˜ 쀑심 역할을 ν•  수 μžˆλ‹€.
  • λ˜ν•œ, 인프라 슀트럭쳐 μˆ˜μ€€μ˜ 사항을 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ»¨ν…Œμ΄λ„ˆμ™€ 뢄리할 수 μžˆλ‹€.

20.2 λ¦¬λ²„μŠ€ ν”„λ‘μ‹œμ˜ λΌμš°νŒ…κ³Ό SSL μ μš©ν•˜κΈ°

Nginx λ₯Ό μ΄μš©ν•˜μ—¬ λ¦¬λ²„μŠ€ ν”„λ‘μ‹œ μ μš©ν•˜κΈ°

  • Nginx λŠ” μ—…μŠ€νŠΈλ¦Ό μ»¨ν…Œμ΄λ„ˆκ°€ μ—¬λŸ¬κ°œ μ‘΄μž¬ν•œλ‹€λ©΄ 이듀 κ°„μ˜ λ‘œλ“œλ°ΈλŸ°μ‹± μ²˜λ¦¬κ°€ κ°€λŠ₯ν•˜λ‹€.
$ echo $'\\n127.0.0.1 image-gallery.local' | sudo tee -a /etc/hosts

$ docker compose -f ./image-gallery/docker-compose.yml up -d --scale image-gallery=3

$ ./nginx/sites-available/image-gallery.local ./nginx/sites-enabled/

$ docker compose -f ./nginx/docker-compose.yml restart nginx

$ curl -i --head <http://image-gallery.local>
$ vi ./nginx/conf/conf.d/default.conf

server {
	server_name image-gallery.local;
	
	location / {
		proxy_pass <http://image-gallery>;
		proxy_set_header Host $host;
		add_header X-Proxy $hostname;
		add_header X-Upstream $upstream_addr;
	}
}
  • X-Upstream ν•­λͺ©μ€ Nginx κ°€ 응닡을 λ°›μ•„ 온 μ»¨ν…Œμ΄λ„ˆμ˜ IP μ£Όμ†Œκ°€ λ‹΄κΈ΄ ν•­λͺ©μ΄λ‹€.
  • curl 을 μ‚¬μš©ν•΄ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ ν˜ΈμΆœν•  경우 λ‘œλ“œλ°ΈλŸ°μ‹±μ΄ μ μš©λ˜μ–΄ 맀번 ν˜ΈμΆœλ˜λŠ” IP μ£Όμ†Œκ°€ λ³€κ²½λ˜λŠ” 것을 확인 κ°€λŠ₯ν•˜λ‹€.

Nginx SSL μ μš©ν•˜κΈ°

  • λ¦¬λ²„μŠ€ ν”„λ‘μ‹œλ₯Ό μ΄μš©ν•˜λ©΄ HTTPS λ₯Ό μ μš©ν•  수 μžˆλ‹€.
  • Nginx λŠ” Let’s Encrypt 와 같은 μ‹€μ œ 도메인 μ œκ³ μ•„λ‚˜ μ„œλΉ„μŠ€μ—μ„œ λ°œκΈ‰ν•œ μ‹€μ œ μΈμ¦μ„œλ₯Ό 섀정에 포함할 수 μžˆλ‹€.
# 자체 μΈμ¦μ„œ 생성
$ docker container run -v "$(pwd)/nginx/certs:/certs" -e HOST_NAME=image-gallery.local diamol/cert-generator

# κΈ°μ‘΄ μ„€μ • 파일 μ‚­μž¬
$ rm ./nginx/sites-enabled/image-gallery.local

# SSL 이 ν¬ν•¨λœ μ„€μ • 파일 볡사
$ cp ./nginx/sites-available/image-gallery-3.local ./nginx/sites-enabled/image-gallery.local

# μž¬μ‹œμž‘
$ docker compose -f nginx/docker-compose.yml restart nginx
$ vi ./nginx/conf/conf.d/default.conf

server {
	server_name image-gallery.local;
	listen 80;
		return 301 https://$server.name$request_uri;
}

server {
	server_name image-gallery.local;
	listen 443 ssl;
	
	ssl_certificate /etc/nginx/certs/server-cert.pem;
	ssl_certificate_key /etc/nginx/certs/server-key.pem;
	ssl_session_cache shared:SSL:10m;
	ssl_session_timeout 20m;
	ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
	
	ssl_prefer_server_ciphers on;
	ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
	
	add_header Strict-Transport-Security "max-age=31536000" always;
	
	location /api/image {
			proxy_pass <http://iotd/image>;
			proxy_set_header Host $host;
			add_header X-Proxy $hostname;
			add_header X-Upstream $upstream_addr;
	}
	
	location / {
		proxy_pass <http://image-gallery>;
		proxy_set_header Host $host;
		add_header X-Proxdy $hostname;
		add_header X-Upstream $upstream_addr;
	}
}
  • μΈμ¦μ„œμ™€ ν‚€ 파일 μŒμ€ ν•˜λ‚˜μ˜ λ„λ©”μΈμ—μ„œλ§Œ μœ νš¨ν•˜λ―€λ‘œ, μ• ν”Œλ¦¬μΌ€μ΄μ…˜ ν•˜λ‚˜λ§ˆλ‹€ μΈμ¦μ„œμ™€ ν‚€ 파일 μ„ΈνŠΈκ°€ ν•„μš”ν•˜λ‹€.
  • μΈμ¦μ„œμ™€ ν‚€ νŒŒμΌμ€ 민감 μ •λ³΄λ‘œ λΉ„λ°€κ°’ ν˜•νƒœλ‘œ ν΄λŸ¬μŠ€ν„°μ— μ €μž₯λœλ‹€.
  • HTTPS λ₯Ό μ μš©ν•˜μ§€ μ•ŠμœΌλ©΄, μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ»¨ν…Œμ΄λ„ˆ μ„€μ •κ³Ό μΈμ¦μ„œ 관리 뢀담이 쀄어듀며, κ°œλ°œμžλŠ” λ‹¨μˆœ HTTP λ²„μ „μœΌλ‘œ ν…ŒμŠ€νŠΈλ₯Ό 진행할 수 μžˆλ‹€.

20.3 ν”„λ‘μ‹œλ₯Ό μ΄μš©ν•œ μ„±λŠ₯ 및 μ‹ λ’°μ„± κ°œμ„ 

  • Nginx λŠ” κ³ μ„±λŠ₯ HTTP μ„œλ²„λ‘œ 정적 HTML μ½˜ν…μΈ λ‚˜ 단일 νŽ˜μ΄μ§€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ œκ³΅ν•˜λŠ”λ° ν™œμš©ν•  수 μžˆλ‹€.
  • μ»¨ν…Œμ΄λ„ˆ ν•˜λ‚˜λ§ŒμœΌλ‘œλ„ μ΄ˆλ‹Ή 수천건의 μš”μ²­μ„ μ²˜λ¦¬ν•  수 μžˆλ‹€.
  • 이λ₯Ό ν™œμš©ν•˜μ—¬ Nginx λ₯Ό 캐싱 ν”„λ‘μ‹œλ‘œ μ‚¬μš©ν•  수 μžˆλ‹€.
  • μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 응닡을 둜컬 λ””μŠ€ν¬λ‚˜ λ©”λͺ¨λ¦¬μ— μ €μž₯ν•˜κ³ , λ™μΌν•œ μš”μ²­μ— λŒ€ν•΄ μ—…μŠ€νŠΈλ¦Ό μ½˜ν…μΈ μ— μš”μ²­ν•˜μ§€ μ•Šκ³ , μ €μž₯된 것을 μ‚¬μš©ν•œλ‹€.
  • λ”°λΌμ„œ, 캐싱 ν”„λ‘μ‹œλ₯Ό μ‚¬μš©ν•˜κ²Œ 되면 μš”μ²­ μ‹œκ°„μ„ 쀄이고, 같은 인프라 슀트럭처둜 더 λ§Žμ€ μš”μ²­μ„ μ²˜λ¦¬ν•  수 μžˆλ‹€.
$ vi ./nginx/sites-available/image-gallery-4.local

server {
    server_name image-gallery.local;
    listen 80;
	return 301 https://$server_name$request_uri;
}

server {
	server_name  image-gallery.local;
	listen 443 ssl;
    
    gzip  on;    
    gzip_proxied any;

	ssl_certificate        /etc/nginx/certs/server-cert.pem;
	ssl_certificate_key    /etc/nginx/certs/server-key.pem;
	ssl_session_cache      shared:SSL:10m;
	ssl_session_timeout    20m;
	ssl_protocols          TLSv1 TLSv1.1 TLSv1.2;

	ssl_prefer_server_ciphers on;
	ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';

	add_header  Strict-Transport-Security "max-age=31536000" always;

    location = /api/image {
        proxy_pass             <http://iotd/image>;
        proxy_set_header       Host $host;
        proxy_cache            SHORT;
        proxy_cache_valid      200  1m;
        add_header             X-Cache $upstream_cache_status;
        add_header             X-Proxy $hostname;         
        add_header             X-Upstream $upstream_addr;
    }

    location / {
        proxy_pass             <http://image-gallery>;
        proxy_set_header       Host $host;
        proxy_cache            LONG;
        proxy_cache_valid      200  6h;
        proxy_cache_use_stale  error timeout invalid_header updating
                               http_500 http_502 http_503 http_504;
        add_header             X-Cache $upstream_cache_status;
        add_header             X-Proxy $hostname;         
        add_header             X-Upstream $upstream_addr;
    }        
}

$ cp ./nginx/sites-available/image-gallery-4.local ./nginx/sites-enabled/image-gallery.local

$ docker compose -f ./nginx/docker-compose.yml restart nginx
  • ν”„λ‘μ‹œ 섀정에 μ‚¬μš©μž μ •μ˜ 응닡 헀더인 X-Cache κ°€ ν¬ν•¨λœλ‹€.
  • μš”μ²­μ— ν•΄λ‹Ήν•˜λŠ” μΊμ‹œκ°€ μžˆλŠ”μ§€ λ¨Όμ € ν™•μΈν•œ 이후, μš”μ²­μ— μΌμΉ˜ν•˜λŠ” μΊμ‹œκ°€ 없을 경우 X-Cache: MISS κ°€ λ°˜ν™˜λœλ‹€.
  • μΆ”κ°€λ‘œ X-Upstream 헀더에 μ½˜ν…μΈ λ₯Ό μ œκ³΅ν•œ IP μ£Όμ†Œκ°€ μ‘λ‹΅λœλ‹€.
  • 같은 μš”μ²­μ΄ μΆ”κ°€λ‘œ 듀어왔을 경우 X-Cache: HIT κ³Ό ν•¨κ»˜ μ‘λ‹΅λ˜λ©°, X-Upstream ν—€λ”λŠ” λ“€μ–΄μ˜€μ§€ μ•ŠλŠ”λ‹€.
  • proxy_cache_use_stale λŠ” Upstream 을 μ‚¬μš©ν•˜μ§€ λͺ»ν•  경우 만료된 μΊμ‹œλ₯Ό μ‚¬μš©ν•˜λΌλŠ” μ˜λ―Έμ΄λ‹€.
  • 만료된 μΊμ‹œλΌλ„ μ‚¬μš©ν•¨μœΌλ‘œμ¨ μ»¨ν…Œμ΄λ„ˆκ°€ μž₯μ• λ₯Ό μΌμœΌμΌœλ„ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μ„œλΉ„μŠ€λ₯Ό μ œκ³΅ν•  수 μžˆλ‹€.

20.4 ν΄λΌμš°λ“œ λ„€μ΄ν‹°λΈŒ λ¦¬λ²„μŠ€ ν”„λ‘μ‹œ

  • 도컀 엔진과 μ—°κ²°λœ μ»¨ν…Œμ΄λ„ˆλŠ” 도컀 APIλ₯Ό 톡해 λ‹€λ₯Έ μ»¨ν…Œμ΄λ„ˆμ— λŒ€ν•œ 정보λ₯Ό 얻을 수 μžˆλ‹€.
  • ν΄λΌμš°λ“œ λ„€μ΄ν‹°λΈŒ λ¦¬λ²„μŠ€ ν”„λ‘μŠ€ 도ꡬ인 νŠΈλž˜ν”½ (Traefik) 이 이런 λ°©μ‹μœΌλ‘œ λ™μž‘ν•œλ‹€.
  • νŠΈλž˜ν”½μ„ μ‚¬μš©ν•  경우 μ»¨ν…Œμ΄λ„ˆμ— λ ˆμ΄λΈ”λ§Œ μΆ”κ°€ν•˜λ©΄ 슀슀둜 μ„€μ •κ³Ό λΌμš°νŒ… 맡을 ꡬ성할 수 μžˆλ‹€.
  • νŠΈλž˜ν”½μ„ μ‚¬μš©ν•˜λ©΄ μžλ™μœΌλ‘œ λ¦¬λ²„μŠ€ ν”„λ‘μ‹œ κΈ°λŠ₯을 μ‚¬μš©ν•  수 μžˆμ§€λ§Œ, Nginx 와 λ‹€λ₯΄κ²Œ 캐싱을 ν•  수 μ—†λ‹€.

νŠΈλž˜ν”½ νŠΉμ§•

  • 동적 μ„€μ • ꡬ성
    • νŠΈλž˜ν”½μ€ μ‹œμž‘ν•  λ•Œ μ„€μ • νŒŒμΌμ„ 읽지 μ•Šκ³ , λŸ°νƒ€μž„ 쀑에 ꡬ성을 λ³€κ²½ν•  수 μžˆλ‹€.
  • μžλ™ Service Discovery
    • μΈν”„λΌμŠ€νŠΈλŸ­μ²˜μ— λŒ€ν•œ λ„€ν‹°μ΄λΈŒ 지원을 톡해 μƒˆλ‘œμš΄ μ„œλΉ„μŠ€λ₯Ό μžλ™μœΌλ‘œ κ°μ§€ν•˜κ³ , νŠΈλž˜ν”½μ„ ν•΄λ‹Ή μ„œλΉ„μŠ€λ‘œ λΌμš°νŒ…ν•œλ‹€.
  • μ΅œμ‹  ν”„λ‘œν† μ½œ 지원
    • HTTP/2, WebSocket, GRPC λ“±μ˜ μ΅œμ‹  ν”„λ‘œν† μ½œμ„ μ§€μ›ν•¨μœΌλ‘œμ¨, μ›ν• ν•œ 톡신이 κ°€λŠ₯ν•˜λ‹€.
  • Let’s Encrypt λ₯Ό μ‚¬μš©ν•œ HTTPS 지원
    • Let’s Encrypt λ₯Ό μ‚¬μš©ν•˜μ—¬ μžλ™μœΌλ‘œ SSL/TLS μΈμ¦μ„œλ₯Ό λ°œκΈ‰ν•˜κ³  관리할 수 μžˆλ‹€.

νŠΈλž˜ν”½ ꡬ성

  • μ—”νŠΈλ¦¬ 포인트
    • μ™ΈλΆ€μ—μ„œ λ“€μ–΄μ˜€λŠ” νŠΈλž˜ν”½μ„ μ£Όμ‹œν•˜λŠ” 포트.
    • ν•΄λ‹Ή ν¬νŠΈμ™€ μ»¨ν…Œμ΄λ„ˆμ˜ 곡개 ν¬νŠΈκ°€ 맀핑
  • λΌμš°ν„°
    • μΈμž…λœ μš”μ²­μ„ λ°°μ •ν•  μ»¨ν…Œμ΄λ„ˆλ₯Ό κ²°μ •ν•˜λŠ” κ·œμΉ™.
    • 호슀트 λͺ…, 경둜 λ“±μœΌλ‘œ ꡬ성
  • μ„œλΉ„μŠ€
    • μ‹€μ œ μ½˜ν…μΈ λ₯Ό μ œκ³΅ν•˜λŠ” μ—…μŠ€νŠΈλ¦Ό μ»΄ν¬λ„ŒνŠΈ
  • 미듀웨어
    • λΌμš°ν„° μ„œλΉ„μŠ€ μ‚¬μ΄μ—μ„œ μ„œλΉ„μŠ€μ— μ „λ‹¬λ˜λŠ” μš”μ²˜μ„ λ³€κ²½ν•˜λŠ” μ—­ν• 
    • μš”μ²­μ— ν¬ν•¨λœ 경둜 λ˜λŠ” 헀더λ₯Ό λ³€κ²½ν•˜κ±°λ‚˜ 인증을 κ°•μ œν•  수 μžˆλ‹€.
services:
	whoami:
		labels:
			- "traefik.enable=true"
			- "traefik.http.routers.whoami.rule=Host('whoami.local')"

μŠ€ν‹°ν‚€ μ„Έμ…˜

  • μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ λ§Œλ“€ λ•Œ μ΅œλŒ€ν•œ λ§Žμ€ 뢀뢄을 λ¬΄μƒνƒœλ‘œ λ§Œλ“œλŠ” 것이 μ’‹λ‹€.
  • λ¬΄μƒνƒœλ‘œ λ§Œλ“€λ©΄ 아무 μ»¨ν…Œμ΄λ„ˆμ—μ„œλ‚˜ μš”μ²­μ„ μ²˜λ¦¬ν•  수 μžˆμœΌλ―€λ‘œ μˆ˜ν‰ ν™• μž₯ 및 λ‘œλ“œ λ°ΈλŸ°μ‹± 효과λ₯Ό κ·ΉλŒ€ν™” ν•  수 μžˆλ‹€.
  • κ·ΈλŸ¬λ‚˜, κΈ°μ‘΄ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 경우 μƒνƒœκ°€ μžˆλŠ” ꡬ솑 μš”μ†Œλ₯Ό 많이 ν¬ν•¨ν•˜κ³ μžˆλŠ” κ²½μš°κ°€ μžˆλ‹€.
  • 이 경우 μŠ€ν‹°ν‚€ μ„Έμ…˜μ΄ ν•„μš”ν•˜λ‹€.
  • μŠ€νŠΈν‚€ μ„Έμ…˜μ„ ν™œμ„±ν™”ν•˜λ©΄ ν΄λΌμ΄μ–ΈνŠΈμ— μ»¨ν…Œμ΄λ„ˆλ₯Ό 식별할 수 μžˆλŠ” μΏ κΈ°κ°€ λΆ€μ—¬λ˜λ―€λ‘œ ν•΄λ‹Ή μ‚¬μš©μžμ˜ μš”μ²­μ„ 계속 같은 μ»¨ν…Œμ΄λ„ˆλ‘œ λΌμš°νŒ… ν•  수 μžˆλ‹€.
services:
	whoami:
		labels:
			- "traefik.enable=true"
			- "traefik.http.routers.whoami.rule=Host('whoami.local')"
			- "traefik.http.services.whoami.loadBalancer.sticky=true"
			- "traefik.http.services.whoami.loadBalancer.sticky.cookie.name=whoami_cookie"
			- "traefik.http.services.whoami.loadBalancer.sticky.cookie.httpOnly=true"

20.5 λ¦¬λ²„μŠ€ ν”„λ‘μ‹œλ₯Ό ν™œμš©ν•œ νŒ¨ν„΄μ˜ 이해

ν•œ ν΄λŸ¬μŠ€ν„°μ—μ„œ 각 λ‹€λ₯Έ 도메인 이름을 κ°–λŠ” μ—¬λŸ¬ 개의 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ ν˜ΈμŠ€νŒ…ν•˜λŠ” νŒ¨ν„΄

  • λ¦¬λ²„μŠ€ ν”„λ‘μ‹œλ§Œ 80번 ν¬νŠΈμ™€ 443 포트λ₯Ό 톡해 μ™ΈλΆ€λ‘œ λ…ΈμΆœν•œλ‹€.
  • κ·Έ μ™Έμ˜ μ»¨ν…Œμ΄λ„ˆλŠ” λͺ¨λ‘ μ™ΈλΆ€λ‘œ λ…ΈμΆœλ˜μ§€ μ•ŠλŠ”λ‹€.
  • λΌμš°νŒ… κ·œμΉ™μ„ 톡해 ν•„μš”ν•œ μ»¨ν…Œμ΄λ„ˆμ— λΌμš°νŒ…ν•œλ‹€.

λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€ μ•„ν‚€νƒμ²˜μ˜ 일뢀 μš”μ†Œλ₯Ό μ™ΈλΆ€λ‘œ λ…ΈμΆœμ‹œν‚€λŠ” νŒ¨ν„΄

  • λ¦¬λ²„μŠ€ ν”„λ‘μ‹œλ₯Ό 톡해 μ›Ή μ»¨ν…Œμ΄λ„ˆμ™€ λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€ 쀑 일뢀가 μ™ΈλΆ€λ‘œ λ…ΈμΆœλœλ‹€.
  • μ—”νŠΈλ¦¬ν¬μΈνŠΈλŠ” 같은 도메인을 μ‚¬μš©ν•˜μ§€λ§Œ, HTTP μš”μ²­ κ²½λ‘œμ— 따라 μš”μ²­μ΄ λ‹€λ₯Έ μ»¨ν…Œμ΄λ„ˆλ‘œ λΌμš°νŒ…λœλ‹€.

λͺ¨λ†€λ¦¬μ‹ 섀계λ₯Ό 가진 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ μ§„μ μœΌλ‘œ μ»¨ν…Œμ΄λ„ˆλ‘œ μ΄μ£Όμ‹œν‚€κΈ°

  • λ¦¬λ²„μŠ€ ν”„λ‘μ‹œλ₯Ό μ΄μš©ν•΄ λͺ¨λ†€λ¦¬μ‹ 섀계λ₯Ό μ μ§„μ μœΌλ‘œ λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€λ‘œ λΆ„ν• ν•  수 μžˆλ‹€.
  • μƒˆλ‘œμš΄ κΈ°λŠ₯은 λ³„λ„μ˜ μ»¨ν…Œμ΄λ„ˆ ν˜•νƒœλ‘œ μΆ”κ°€ν•˜λ©°, λ¦¬λ²„μŠ€ ν”„λ‘μ‹œλ₯Ό 톡해 μš”μ²­ κ²½λ‘œμ— 따라 μ „λ‹¬ν•œλ‹€.
728x90
λ°˜μ‘ν˜•
MyeongDev