Categories
Nginx 서버

NGINX Proxy 502 Bad Gateway 오류 해결하기 ~ upstream sent too big header while reading response header from upstream

최근 작업중 잘 안풀리는 오류가 있어서 이에 대해 예기해 보겠습니다.

어떤작업을 하다가 API 서버 단에서는 Redirect 처리를 보내면 클라이언트 웹서버에서 받아서 그냥 클라이언트 브라우저로 넘겨주면 되는데… 이 과정에서 아래와 같은 오류를 일으킵니다.

502 Bad Gateway… 하아… 분명 로컬 개발 환경에서 테스트 했을 때는 이상이 없었는데요. 본서버로 올리고 나니 이런 참담한 오류가 발생하네요.

nginx 웹서버 로그를 살펴보기로 했습니다. API 서버쪽 로그는 정상적으로 302 리다이렉트 HTTP STATUS 값을 출력하고 있네요.

클라이언트 웹서버의 에러로그를 확인하니 아래와 같은 오류 로그를 발견하였습니다.

2019/06/05 10:18:00 [error] 15777#15777: *699 upstream sent too big header while reading response header from upstream, client: xxx.xxx.xxx.xxx, server: doogle.link, request: "GET /...."

upstream sent too big header while reading response header from upstream 란 오류메시지를 확인할 수 있습니다. 직역하면 “업스트림으로부터 응답해더를 읽는 도중 업스트림은 너무 큰 헤더를 보냈다.” 정도가 되겠네요.

보통 502 Bad Gateway 오류의 경우 nginx + php-fpm 환경인 경우에도 많이 발생하는데요. 이에 대한 해결책은 다른 글로 작해두었으니 필요하시면 보시기 바랍니다. https://doogle.link/nginx-php-fpm-환경에서-502-bad-gateway-문제-해결방법/

위의 방법을 시도해 보았지만… 역시 Nodejs 웹서버의 리버스 프락시로 동작하기때문에 별 상관이 없더군요.

결국 Nginx 설명서와 구글링을 통해 검색해본 결과 다음과 같이 가상호스트 설정에 프락시 버퍼 설정을 추가해주면 된다고 하네요.

server {
  listen        80;
  server_name   doogle.link;

  location / {
    proxy_pass       http://upstream;
    ...

    # 아래와 같이 프락시 버퍼 사이즈를 적당이 늘려준다.
    proxy_buffer_size          128k;
    proxy_buffers              4 256k;
    proxy_busy_buffers_size    256k;
  }
}

설정파일을 저장후 아래와같이 서버 설정을 다시 읽어오게 하거나 서버 재시작을 하면 됩니다.

> sudo systemctl reload nginx

이제 문제가 있던 페이지를 열어보면 정상적으로 처리됩니다. ^^

역시 NGINX 는 버퍼를 아주 좋아하는 것 같습니다. 늘려주면 대부분 해결됩니다. ㅎㅎ