๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

aws EC2 ํ™œ์šฉ ์ค‘ nginx ์„ค์ • ๋ฐ ๊ถŒํ•œ ์ด์Šˆ

์‹œํ๋ฆฌํ‹ฐ์ง€ํ˜ธ 2024. 5. 14.

EC2๋กœ ํ”„๋ก ํŠธ React๋ฅผ ๋ฐฐํฌํ•˜๊ธฐ ์œ„ํ•ด Nginx๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ ๊ถŒํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค!!
 
 
๊ถŒํ•œ ์—๋Ÿฌ
"""
sudo tail -f /var/log/nginx/error.log 2024/05/04 05:55:08 [crit] 7582#7582: *2 stat() "/home/ubuntu/teammap-frontend-pipeline/index.html" failed (13: Permission denied), client: 59.11.133.163, server: 3.12.107.101, request: "GET /favicon.ico HTTP/1.1", host: "3.12.107.101", referrer: "http://3.12.107.101/" 2024/05/04 05:55:08 [crit] 7582#7582: *2 stat() "/home/ubuntu/teammap-frontend-pipeline/index.html" failed (13: Permission denied), client: 59.11.133.163, server: 3.12.107.101, request: "GET /favicon.ico HTTP/1.1", host: "3.12.107.101", referrer: "http://3.12.107.101/" 2024/05/04 05:55:08 [crit] 7582#7582: *2 stat() "/home/ubuntu/teammap-frontend-pipeline/index.html" failed (13: Permission denied), client: 59.11.133.163, server: 3.12.107.101, request: "GET /favicon.ico HTTP/1.1", host: "3.12.107.101", referrer: "http://3.12.107.101/" 2024/05/04 05:55:08 [crit] 7582#7582: *2 stat() "/home/ubuntu/teammap-frontend-pipeline/index.html" failed (13: Permission denied), client: 59.11.133.163, server: 3.12.107.101, request: "GET /favicon.ico HTTP/1.1", host: "3.12.107.101", referrer: "http://3.12.107.101/" 2024/05/04 05:55:08 [crit] 7582#7582: *2 stat() "/home/ubuntu/teammap-frontend-pipeline/index.html" failed (13: Permission denied), client: 59.11.133.163, server: 3.12.107.101, request: "GET /favicon.ico HTTP/1.1", host: "3.12.107.101", referrer: "http://3.12.107.101/" 2024/05/04 05:55:08 [crit] 7582#7582: *2 stat() "/home/ubuntu/teammap-frontend-pipeline/index.html" failed (13: Permission denied), client: 59.11.133.163, server: 3.12.107.101, request: "GET /favicon.ico HTTP/1.1", host: "3.12.107.101", referrer: "http://3.12.107.101/" 2024/05/04 05:55:08 [crit] 7582#7582: *2 stat() "/home/ubuntu/teammap-frontend-pipeline/index.html" failed (13: Permission denied), client: 59.11.133.163, server: 3.12.107.101, request: "GET /favicon.ico HTTP/1.1", host: "3.12.107.101", referrer: "http://3.12.107.101/" 2024/05/04 05:55:08 [crit] 7582#7582: *2 stat() "/home/ubuntu/teammap-frontend-pipeline/index.html" failed (13: Permission denied), client: 59.11.133.163, server: 3.12.107.101, request: "GET /favicon.ico HTTP/1.1", host: "3.12.107.101", referrer: "http://3.12.107.101/" 2024/05/04 05:55:08 [crit] 7582#7582: *2 stat() "/home/ubuntu/teammap-frontend-pipeline/index.html" failed (13: Permission denied), client: 59.11.133.163, server: 3.12.107.101, request: "GET /favicon.ico HTTP/1.1", host: "3.12.107.101", referrer: "http://3.12.107.101/" 2024/05/04 05:55:08 [error] 7582#7582: *2 rewrite or internal redirection cycle while internally redirecting to "/index.html", client: 59.11.133.163, server: 3.12.107.101, request: "GET /favicon.ico HTTP/1.1", host: "3.12.107.101", referrer: "http://3.12.107.101/"
"""
 
์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด

 sudo chmod 755 /home/ubuntu

 ๋ช…๋ น์–ด๋ฅผ ์ž‘์„ฑํ•ด์คฌ๋‹ค.
 
์ดํ›„, 
 

sudo -u www-data cat /home/ubuntu/teammap-frontend-pipeline/index.html

๋ฅผ ์ž‘์„ฑํ•ด์คŒ์œผ๋กœ์จ www-data๊ฐ€ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์คฌ๋‹ค.
 

<!doctype html>
<html lang="en">

<head>
  <meta charset="UTF-8" />
  <link rel="icon" type="image/png" href="/assets/icon-DfLVdc98.png" class="bg-indigo-800" />
  <link href="https://fonts.googleapis.com/css2?family=Jua&display=swap" rel="stylesheet">
  <link href="https://fonts.googleapis.com/css2?family=Nanum+Myeongjo&display=swap" rel="stylesheet">
  <link href="https://fonts.googleapis.com/css2?family=Do+Hyeon&display=swap" rel="stylesheet">
  <link href="https://fonts.googleapis.com/css2?family=Song+Myung&display=swap" rel="stylesheet">
  <link href="https://fonts.googleapis.com/css2?family=Gugi&display=swap" rel="stylesheet">
  <link href="https://fonts.googleapis.com/css2?family=Hahmlet&display=swap" rel="stylesheet">
  <link href="https://fonts.googleapis.com/css2?family=Gowun+Batang&display=swap" rel="stylesheet">
  <link href="https://fonts.googleapis.com/css2?family=Orbit&display=swap" rel="stylesheet">

  <!-- ์ž„์‹œ -->
  <!-- <script defer src="https://unpkg.com/alpinejs@3.x.x/dist/cdn.min.js"></script> -->
  <!-- <script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/3.5.1/chart.min.js"></script> -->
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />

  <script type="text/javascript" async defer
    src="//dapi.kakao.com/v2/maps/sdk.js?appkey=0ed864a6358904fb3dd1f67c07afc0ae&autoload=false&libraries=services"></script>
  <script src="https://cdn.jsdelivr.net/npm/three@0.126.1/build/three.min.js"></script>

  <title>์šฐ์ฃผํ•ด</title>

  <script type="module" crossorigin src="/assets/index-BrrWTV2P.js"></script>
  <link rel="stylesheet" crossorigin href="/assets/index-B2AM09Tq.css">
</head>

<body>
  <div id="root"></div>
</body>

</html>

 
์ด๋ ‡๊ฒŒ ๋ฌด์‚ฌํžˆ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•œ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๊ณ  Nginx ๊ฐ€ ์‹คํ–‰์ด ๋˜๋ฉด์„œ ๋ฌด์‚ฌํžˆ ๋ฐฐํฌ๊ฐ€ ๊ฐ€๋Šฅํ–ˆ๋‹ค.
 
 

๋ฌธ์ œ์˜ ์›์ธ 

 
๋ฌธ์ œ์˜ ์›์ธ๊ณผ ํ•ด๊ฒฐ ๊ณผ์ •์„ ์ข…ํ•ฉ์ ์œผ๋กœ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š”, ํŒŒ์ผ ์‹œ์Šคํ…œ ๊ถŒํ•œ, ์šด์˜ ์ฒด์ œ์˜ ๋ณด์•ˆ ์ •์ฑ…, ๊ทธ๋ฆฌ๊ณ  ์›น ์„œ๋ฒ„ ์„ค์ •์ด ์–ด๋–ป๊ฒŒ ์ƒํ˜ธ ์ž‘์šฉํ•˜๋Š”์ง€๋ฅผ ํŒŒ์•…ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ๋ฐœ์ƒํ•œ ๋ฌธ์ œ๋Š” ์ฃผ๋กœ ๋ฆฌ๋ˆ…์Šค ํŒŒ์ผ ์‹œ์Šคํ…œ์˜ ๊ถŒํ•œ ์„ค์ •๊ณผ ๊ด€๋ จ์ด ์žˆ์—ˆ์œผ๋ฉฐ, ํŠนํžˆ ์›น ์„œ๋ฒ„์ธ Nginx๊ฐ€ ์‹คํ–‰๋˜๋Š” ์‚ฌ์šฉ์ž(www-data)์˜ ํŒŒ์ผ ์ ‘๊ทผ ๊ถŒํ•œ์ด ์ค‘์‹ฌ์ด์—ˆ์Šต๋‹ˆ๋‹ค.
 

  1. ๊ถŒํ•œ ์„ค์ •: /home/ubuntu ๋””๋ ‰ํ† ๋ฆฌ์— ๋Œ€ํ•œ ์ ‘๊ทผ ๊ถŒํ•œ์ด ubuntu ์‚ฌ์šฉ์ž์—๊ฒŒ๋งŒ ์ œํ•œ์ ์œผ๋กœ ๋ถ€์—ฌ๋˜์–ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค (drwxr-x---). ์ด ์„ค์ •์€ www-data ์‚ฌ์šฉ์ž๊ฐ€ ์ด ๋””๋ ‰ํ† ๋ฆฌ ์•„๋ž˜์— ์œ„์น˜ํ•œ index.html ํŒŒ์ผ์„ ํฌํ•จํ•œ ๋ชจ๋“  ํŒŒ์ผ์— ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉํ•ดํ–ˆ์Šต๋‹ˆ๋‹ค.
  2. ์›น ์„œ๋ฒ„ ์‚ฌ์šฉ์ž: Nginx๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ www-data ์‚ฌ์šฉ์ž ๊ณ„์ •์œผ๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ์›น ์„œ๋ฒ„๊ฐ€ ์›น ์ฝ˜ํ…์ธ ๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ•ด๋‹น ํŒŒ์ผ๊ณผ ๋””๋ ‰ํ† ๋ฆฌ์— ์ ‘๊ทผ ๊ถŒํ•œ์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  3. SELinux ๋ฐ AppArmor: ๋ฆฌ๋ˆ…์Šค ๋ฐฐํฌํŒ์— ๋”ฐ๋ผ SELinux๋‚˜ AppArmor์™€ ๊ฐ™์€ ์ถ”๊ฐ€ ๋ณด์•ˆ ์ •์ฑ…์ด ํŒŒ์ผ ์ ‘๊ทผ์— ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ, SELinux๋Š” ๋น„ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์—ˆ์œผ๋‚˜, ์ด๋Ÿฌํ•œ ๋ณด์•ˆ ๋ชจ๋“ˆ์ด ํ™œ์„ฑํ™”๋˜์–ด ์žˆ๋‹ค๋ฉด ๋ฌธ์ œ์˜ ์›์ธ์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•ด๊ฒฐ ๊ณผ์ •

  1. ๊ถŒํ•œ ๋ณ€๊ฒฝ: /home/ubuntu ๋””๋ ‰ํ† ๋ฆฌ์˜ ๊ถŒํ•œ์„ 755 (drwxr-xr-x)์œผ๋กœ ๋ณ€๊ฒฝํ•˜์—ฌ, ๋ชจ๋“  ์‚ฌ์šฉ์ž๊ฐ€ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ฝ๊ณ  ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด www-data ์‚ฌ์šฉ์ž๋„ /home/ubuntu/teammap-frontend-pipeline/index.html ํŒŒ์ผ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  2. ํŒŒ์ผ ์ ‘๊ทผ ํ…Œ์ŠคํŠธ: ๊ถŒํ•œ ๋ณ€๊ฒฝ ํ›„ www-data ์‚ฌ์šฉ์ž๋กœ ํŒŒ์ผ์— ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์„ ํ…Œ์ŠคํŠธํ•˜์—ฌ ๊ถŒํ•œ ์„ค์ •์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ ์šฉ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค.
  3. Nginx ์žฌ์‹œ์ž‘: ๊ถŒํ•œ ๋ณ€๊ฒฝ์„ ์™„๋ฃŒํ•œ ํ›„, Nginx๋ฅผ ์žฌ์‹œ์ž‘ํ•˜์—ฌ ๋ชจ๋“  ์„ค์ •์„ ์ƒˆ๋กœ๊ณ ์นจํ•˜๊ณ  ์ ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.
  4. ๋ธŒ๋ผ์šฐ์ €์—์„œ์˜ ํ…Œ์ŠคํŠธ: ์ตœ์ข…์ ์œผ๋กœ ์›น ๋ธŒ๋ผ์šฐ์ €๋ฅผ ํ†ตํ•ด ์›น ์‚ฌ์ดํŠธ์— ์ ‘์†ํ•˜์—ฌ ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ์ œ๋Œ€๋กœ ๋ฐ˜์˜๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค.

์ค‘์š” ํฌ์ธํŠธ

  • ๊ถŒํ•œ: ๋ฆฌ๋ˆ…์Šค ์‹œ์Šคํ…œ์—์„œ ํŒŒ์ผ๊ณผ ๋””๋ ‰ํ† ๋ฆฌ์— ๋Œ€ํ•œ ๊ถŒํ•œ์€ ์‚ฌ์šฉ์ž์˜ ํŒŒ์ผ ์ ‘๊ทผ์„ฑ์„ ๊ฒฐ์ •์ง“๋Š” ์ค‘์š”ํ•œ ์š”์†Œ์ž…๋‹ˆ๋‹ค. ์›น ์„œ๋ฒ„ ์„ค์ • ์‹œ, ์›น ์ฝ˜ํ…์ธ  ํŒŒ์ผ์— ๋Œ€ํ•œ ์˜ฌ๋ฐ”๋ฅธ ๊ถŒํ•œ ๋ถ€์—ฌ๋Š” ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค.
  • ๋ณด์•ˆ ์ •์ฑ…: SELinux๋‚˜ AppArmor ๊ฐ™์€ ๋ณด์•ˆ ์ •์ฑ…์ด ํ™œ์„ฑํ™”๋œ ๊ฒฝ์šฐ, ์ด ์ •์ฑ…์ด ์›น ์„œ๋ฒ„์˜ ํŒŒ์ผ ์ ‘๊ทผ์„ ์ œํ•œํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ์ด๋ฅผ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ๋””๋ฒ„๊น…: ๊ถŒํ•œ ๋ฌธ์ œ ํ•ด๊ฒฐ ์‹œ, ls -l, ls -ld์™€ ๊ฐ™์€ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ถŒํ•œ์„ ํ™•์ธํ•˜๊ณ , sudo -u www-data ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹ค์ œ ์›น ์„œ๋ฒ„ ์‚ฌ์šฉ์ž์˜ ๊ด€์ ์—์„œ ํŒŒ์ผ ์ ‘๊ทผ์„ ํ…Œ์ŠคํŠธํ•˜๋Š” ๊ฒƒ์ด ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์ง€์‹์€ ๋ฆฌ๋ˆ…์Šค ๊ธฐ๋ฐ˜ ์‹œ์Šคํ…œ์—์„œ ํ”ํžˆ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์œ ์‚ฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

๋Œ“๊ธ€