nginx에서 502 오류 발생

안녕하세요,

./launcher rebuild app 명령을 실행했는데 겉으로 보기에는 오류가 없었습니다. 하지만 사이트를 열려고 하면 502 오류가 발생합니다.

nginx 오류 로그(shared/standalone/log/var-log/nginx/error.log)에는 다음과 같은 내용이 표시됩니다:

2020/08/12 05:47:43 [error] 653#653: *7 connect() failed (111: Connection refused) while connecting to upstream, client: [...], server: _, request: "GET / HTTP/2.0", upstream: "http://127.0.0.1:3000/", host: "[...]"

discourse와 nginx 502 오류에 대해 찾은 모든 게시물을 확인해 보았지만, 제 상황에 적용할 수 있거나 이해할 만한 내용을 찾지 못했습니다.

이것이 관련이 있을 수 있는데, 컨테이너에서 실행한 결과입니다:

# netstat -plant
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:6379            0.0.0.0:*               LISTEN      -                   
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      644/nginx: master p 
tcp        0      0 0.0.0.0:5432            0.0.0.0:*               LISTEN      -                   
tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      644/nginx: master p 
tcp6       0      0 :::6379                 :::*                    LISTEN      -                   
tcp6       0      0 :::5432                 :::*                    LISTEN      -

포트 3000에서 실행되어야 할 것이 있나요?

이 문제를 디버깅하기 위해 어디를 확인해야 하는지 알려 주실 수 있을까요?

pura vida :slight_smile:

컨테이너 내부의 서비스가 시작되는 동안 처음에는 502 오류가 표시됩니다. 30초 이내에 사라져야 합니다. 사라지지 않는 경우, 서버 CPU에 극심한 부하가 걸려 지연이 발생하는 것일 수 있습니다.

감사합니다 @itsbhanusharma.

./launcher restart app를 실행하고 top으로 부하를 모니터링했는데, 10%를 훨씬 밑돌고 있습니다.

CPU가 부하를 처리하기에 충분할 것 같습니다:

$ cat /proc/cpuinfo  | grep 'name' | uniq
model name      : Intel(R) Xeon(R) CPU E5-1650 v3 @ 3.50GHz
$ cat /proc/cpuinfo  | grep process | wc -l
4

컨테이너의 시작 과정을 디버깅하는 더 나은 방법이 있을까요?
다른 아이디어가 있으신가요?

어떤 플러그인이 설치되어 있나요? 이 서버가 SSD를 사용하고 있나요?

저장소를 클론하고 설정 명령어를 실행했으니, 기본적으로 포함된 플러그인만 있는 것 같습니다. 어디에서 확인해야 하는지 잘 모르겠지만, 제가 직접 추가한 플러그인은 없다고 확신합니다.

서버는 SSD가 아닙니다.

안녕하세요 @elopio

민감한 정보가 없는 ‘yml’ 파일을 공유해 주실 수 있을까요?

네, 여기 있습니다:

https://paste.ubuntu.com/p/k7yR42q2vF/

Discourse에는 SSD가 필요하며, 일반적인 회전 디스크는 충분한 IOPS를 제공하지 못합니다.

그것이 502 오류의 원인인가요? 아니면 SSD가 없으면 웹사이트가 동작은 하지만 매우 느리게 표시되는 걸로 봐야 하나요?

전통적인 하드 드라이브와 SSD 드라이브를 사용하는 것은 502 오류의 원인이 될 수 없습니다. @elopio 님의 질문에서 보듯, 이는 설득력이 부족합니다.

아래에 도움이 될 수 있는 짧은 설명을 첨부합니다:

제 생각에 가장 좋은 방법은 터미널을 열고 Rails와 nginx 로그 파일(오류 로그 및 액세스 로그 포함) 모두에 대해 tail -f 명령을 실행하는 것입니다. 그런 다음 사이트를 접근하여 502 오류가 발생했을 때 로그 파일의 끝부분을 주시하고 있는지 확인하세요.

해당 로그 파일이 어디에 위치해 있는지, 터미널에서 tail -f 명령을 실행하는 방법을 알고 계신가요?


참고로, 이전에 다음과 같이 질문하셨었죠:

Rails는 Docker 컨테이너 내부에서 포트 3000에서 실행되며, 해당 포트는 컨테이너 외부로 노출되지 않습니다. 따라서 컨테이너 외부에서 netstat를 실행할 때 포트 3000이 보이지 않는 이유입니다.

도움이 되셨길 바랍니다.

경험을 말씀드리자면, 느린 I/O는 실제로 타임아웃과 502 오류를 유발할 수 있습니다.

SSD 수준의 IOPS는 필수 요건입니다.

우와, 레일스 로그를 살펴보니 유니콘 로그가 엄청나게 컸고, 몇 가지 권한 오류에 대한 경고가 있었어요. rm -rf tmp/cache/bootsnap-compile-cache/를 실행해서 삭제했는데, 이제 축하 화면이 나타났어요!!!

친구들, 고마워요. SSD 서버로 다시 만들지 결정하기 전에 조금 더 이걸로 놀아볼게요.

@elopio 님, 뭘요.

로그에서 문제를 찾아내고 해결하신 것을 기쁘게 생각합니다. 잘하셨습니다.

앞으로도 순풍이 따르시길 바랍니다!

음, 이게 정말 잘 작동하고 있어요. 우리가 하고 있는 일을 보여드릴게요:

https://bunqueer.jaquerespeis.org/

코스타리카 해커스페이스를 텔레그램에서 디스커스로 이관하는 작업이에요 :slight_smile: 아직 해야 할 일이 정말 많지만, 이번에는 채팅을 확실히 없앨 수 있을 거라고 확신해요. 디스커스 팀 여러분, 정말 감사합니다!