작성
·
532
0
저는 지금 단순 html페이지 대신 react와 함께 nodebird 프로젝트를 하고 있는데요.
지금 aws설정도 다 마치고 pm2를 실행하고 sudo pm2 list를 해봐도 오류 없이 잘 실행됩니다.
그래서 크롬 주소창에 ip를 입력하면 사이트에 연결할 수 없다고 합니다.. 직접적으로 에러가 뜨는 것도 아니여서 어디가 문제인지 잘 모르겠습니다..
github:https://github.com/AUDWO/Whats-up/blob/main/app.js
(prototype-client가 리액트로 만든 페이지 입니다)
답변 1
1
그 부분보다는 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 때문에 서버가 두 대 띄워져있던데 다른 서버에서 응답받고 있을 수 있습니다.
답변 감사합니다. 제시해주신 명령어를 입력하니깐 아무것도 뜨지 않았고 app.js 내에 port관련한 코드에 주석이 되어있는걸 발견했습니다..
그렇게 다시 실행을 하니 이번에는
The Cross-Origin-Opener-Policy header has been ignored, because the URL's
이 에러가 발생하였는데 제가 제로초님 깃허브 15장 코드를 봤을때 빨리 배포하고 싶은 마음에 10장은 넘겨도 될 것 같아서 넘겼는데 10장을 넘겨서 발생한 에러가 맞나요..?