인프런 커뮤니티 질문&답변

김명재님의 프로필 이미지
김명재

작성한 질문수

[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지

AWS에 배포하기

AWS 설정 후 실행했을때 사이트에 연결할 수 없음이 뜹니다

작성

·

520

0

저는 지금 단순 html페이지 대신 react와 함께 nodebird 프로젝트를 하고 있는데요.

지금 aws설정도 다 마치고 pm2를 실행하고 sudo pm2 list를 해봐도 오류 없이 잘 실행됩니다.
스크린샷 2023-11-20 오후 2.17.45.png

그래서 크롬 주소창에 ip를 입력하면 사이트에 연결할 수 없다고 합니다.. 직접적으로 에러가 뜨는 것도 아니여서 어디가 문제인지 잘 모르겠습니다..
스크린샷 2023-11-20 오후 2.18.28.png

github:https://github.com/AUDWO/Whats-up/blob/main/app.js
(prototype-client가 리액트로 만든 페이지 입니다)

답변 1

1

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

일단 서버 실행하실 때 port 80번으로 실행하셨나요?

sudo lsof -i tcp:80 했을 때 node가 나와야 합니다.

김명재님의 프로필 이미지
김명재
질문자

답변 감사합니다. 제시해주신 명령어를 입력하니깐 아무것도 뜨지 않았고 app.js 내에 port관련한 코드에 주석이 되어있는걸 발견했습니다..

그렇게 다시 실행을 하니 이번에는

The Cross-Origin-Opener-Policy header has been ignored, because the URL's

이 에러가 발생하였는데 제가 제로초님 깃허브 15장 코드를 봤을때 빨리 배포하고 싶은 마음에 10장은 넘겨도 될 것 같아서 넘겼는데 10장을 넘겨서 발생한 에러가 맞나요..?

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

그 부분보다는 cors쪽 설정 문제로 보입니다.

https://github.com/ZeroCho/nodejs-book/blob/master/ch15/15.2/nodebird/app.js#L48-L53

이런 것 관련인 것 같긴 한데요.

https://www.npmjs.com/package/helmet#reference

coop를 끄든지 하셔야 합니다.

김명재님의 프로필 이미지
김명재
질문자

if (process.env.NODE_ENV === "production") {
  app.use(
    helmet({
      contentSecurityPolicy: false,
      crossOriginEmbedderPolicy: false,
      crossOriginResourcePolicy: false,
      crossOriginOpenerPolicy: cross - origin,
    })
  );

이렇게 작성하거나

if (process.env.NODE_ENV === "production") {
  app.use(
    helmet({
      contentSecurityPolicy: false,
      crossOriginEmbedderPolicy: false,
      crossOriginResourcePolicy: false,
      crossOriginOpenerPolicy: unsafe-none,
    })
  );

이렇게 코드를 작성했을때는 pm2 list를 확인했을때 계속 재시작 되면서
server > ReferenceError: cross is not defined │

│ ││ server > at Object.<anonymous> (/home/bitnami/Whats-up/app.js:55:32) │

│ ││ server > at Module._compile (node:internal/modules/cjs/loader:1256:14) │

│ ││ server > at Module._extensions..js (node:internal/modules/cjs/loader:1310:10) │

│ ││ server > at Module.load (node:internal/modules/cjs/loader:1119:32) │

│ ││ server > at Module._load (node:internal/modules/cjs/loader:960:12) │

│ ││ server > at Module.require (node:internal/modules/cjs/loader:1143:19) │

│ ││ server > at Hook._require.Module.require (/opt/bitnami/node/lib/node_modules/ │

│ ││ server > at require (node:internal/modules/cjs/helpers:119:18) │

│ ││ server > at Object.<anonymous> (/home/bitnami/Whats-up/server.js:1:13) │

│ ││ server > at Module._compile (node:internal/modules/cjs/loader:1256:14) 이러한 에러가 발생합니다.
그래서 그냥 crossOriginOpenerPolicy:false를 주면 이전과 같은 pm2에러는 발생하지 않지만

웹 브라우저의 console.log에

GET http://43.201.61.27/ 500 (Internal Server Error)

43.201.61.27/:8 The page requested an origin-keyed agent cluster using the Origin-Agent-Cluster header, but could not be origin-keyed since the origin 'http://43.201.61.27' had previously been placed in a site-keyed agent cluster. Update your headers to uniformly request origin-keying for all pages on the origin.

이러한 에러가 뜨길래 구글링 후

if (process.env.NODE_ENV === "production") {
  app.use(
    helmet({
      contentSecurityPolicy: false,
      crossOriginEmbedderPolicy: false,
      crossOriginResourcePolicy: false,
      crossOriginOpenerPolicy: false,
      originAgentCluster: false,
    })
  );

originAgentCluseter:false를 넣어서 해결했습니다

그런데 이제는

T http://43.201.61.27/ 500 (Internal Server Error)

이 에러가 뜨네요 ^ㅠㅠ^ 이건 제 서버 코드 내부의 문제가 있어 그런 것 같은데 한번 열심히 해결해보겠습니다. 답변해주셔서 감사합니다

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

'cross-origin' 이렇게 문자열로 쓰셔야죠;; ㅎㅎㅎ

500은 서버 터미널에 에러 있을 거라서 pm2 monit으로 실시간 모니터링 하면서 보시면 됩니다. pm2 logs --err --lines 200 같이 로그 보는 것도 있고요.

김명재님의 프로필 이미지
김명재
질문자

계속 번거롭게 해서 죄송합니다...

그런데 sudo pm2 monit이나 pm2 logs --err --lines 200 이걸 입력해도 아무 에러가 안뜨는데 이럴 수도 있는건가요..?

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

sudo pm2 monit 켜놓은 상태에서 500 에러나는 요청을 보내보세요. 지금 보니까 pm2 cluster 때문에 서버가 두 대 띄워져있던데 다른 서버에서 응답받고 있을 수 있습니다.

김명재님의 프로필 이미지
김명재

작성한 질문수

질문하기