λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

# 4 Server πŸ’‍♀️/4-2 Nginx

[Nginx] Nginx λž€?

πŸ‘©‍πŸ’» λ™μž‘ μˆœμ„œ 예 πŸ‘©‍πŸ’»
client (λΈŒλΌμš°μ €) ↔ web server (Nginx) ↔ was (Node.js) ↔ database (MySQL)

 

WHAT 
  • Web Server : λ‹¨μˆœνžˆ 정적 νŒŒμΌμ„ 응닡
  • WAS (Web Application Server) : ν΄λΌμ΄μ–ΈνŠΈ μš”μ²­μ— λŒ€ν•΄ 동적인 μ²˜λ¦¬κ°€ 이뀄진 ν›„ 응닡

 

WHY
  • μ›Ήμ„œλ²„λ₯Ό λ³„λ„λ‘œ μš΄μ˜ν•˜λŠ” 이유? - was의 뢀담을 쀄여주기 μœ„ν•΄
  • ꡳ이 nginxλ₯Ό μ‚¬μš©ν•˜λŠ” 이유?
    • λΉ λ₯΄λ‹€
    • λ¦¬λ²„μŠ€ ν”„λ‘μ‹œλ‘œ μ‚¬μš© κ°€λŠ₯ (Reverse Proxy)
      • ν”„λ‘μ‹œμ—λŠ” 1. λ¦¬λ²„μŠ€ ν”„λ‘μ‹œ 2. ν¬μ›Œλ“œ ν”„λ‘μ‹œ κ°€ μ‘΄μž¬ν•¨
      1. λ¦¬λ²„μŠ€ ν”„λ‘μ‹œ : 인터넷과 λ°±μ—”λ“œ 사이에 μžˆλŠ” μ„œλ²„
      2. μΊμ‹±μ„œλ²„λ‘œ μ‚¬μš© κ°€λŠ₯, λ³΄μ•ˆ
      3. ν¬μ›Œλ“œ ν”„λ‘μ‹œ : 인터넷과 ν”„λ‘ νŠΈ 사이에 μžˆλŠ” μ„œ
    • SSL 지원
    • μ›ΉνŽ˜μ΄μ§€ μ ‘κ·Ό 인증
    • μ••μΆ•
    • 비동기 처리
      • 이벀트 루프
    • Nginxλ₯Ό Proxy μ„œλ²„λ‘œ μ•žλ‹¨μ— 두고 Node.js둜 뒷단에 두면 버퍼 μ˜€λ²„ν”Œλ‘œμš° 취약점에 μ˜ν•œ 곡격을 λ°©μ§€ν•  수 있음 (버퍼 μ˜€λ²„ν”Œλ‘œμš° : λ©”λͺ¨λ¦¬ ν•œκ³„λ₯Ό λ„˜λŠ”κ²ƒ)
  • vs μ•„νŒŒμΉ˜
    • μ•„νŒŒμΉ˜λŠ” λ™μ‹œ μš”μ²­μž μˆ˜κ°€ 급증할 λ•Œ λ§ˆλ‹€ λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰ μ¦κ°€ν•˜μ§€λ§Œ nginxλŠ” λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰μ„ 효율적으둜 μ‚¬μš©
    • μ΄ˆλ‹Ή μš”μ²­μ²˜λ¦¬λ„ nginxκ°€ μ›”λ“±νžˆ 많고 빠름

 

HOW
  • clientκ°€ http둜 접속을 ν•˜λ©΄ 80번으둜 접속이 됌
  • https둜 μ ‘μ†ν•˜λ©΄ 443번으둜 접속이 됌
  • clientκ°€ 80번으둜 μ ‘μ†ν•˜λ©΄ Nginxκ°€ 443번 포트둜 μš°νšŒμ‹œμΌœμ€Œ (λ¦¬λ‹€μ΄λ ‰νŠΈ)
    • 443μ—μ„œλŠ” node둜 갈 수 있게 ν•΄μ€Œ (ex.5000)
$ sudo apt-get update

$ sudo apt-get upgrade -y

$ sudo apt-get install nginx

$ sudo service nginx start

$ cd/etc/nginx/sites-enabled

$ sudo rm default

$ sudo vi default
  • nginx μ„€μΉ˜ ν›„ μ„€μ •νŒŒμΌμ΄ μƒμ„±λ˜λ©΄ 기본적으둜 있던 λ‚΄μš© μ‚­μ œ ν›„ λ‚΄κ°€ μ›ν•˜λŠ” μ„€μ •μœΌλ‘œ μ„ΈνŒ…
  • μƒνƒœμ½”λ“œ
// 80 -> 443 κ°€λŠ” μ„€μ •
server {
	listen 80:
	server_name μ„œλ²„ λ„€μž„:
	# access_log ~~~~~
	# error_log ~~~~~
if ($host = μ„œλ²„ λ„€μž„) {
	return 301 https://$host$request_uri:
	}
}

 

// 443 -> was (node)둜 κ°€λŠ” μ„€μ •
server {
	listen 443 ssl:
	server_name μ„œλ²„ λ„€μž„:
	# access_log ~~~~~
	# error_log ~~~~~
	location / {
		proxy_pass http://127.0.0.1:5000:
	}
}
LIST