«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Archives
Today
Total
09-21 13:21
관리 메뉴

DevTzu

[Debug] 아파치 파일 업로드 오류 ERR_CONNECTION_RESET 본문

study

[Debug] 아파치 파일 업로드 오류 ERR_CONNECTION_RESET

DevTzu 2022. 5. 18. 11:04
반응형

 

(failed)net::ERR_CONNECTION_RESET

 

 

[시스템 환경]

최근 새로운 운영사이트를 인수인계받았습니다.

그동안 개발해왔던 시스템 구성 환경은 nginx + Spring Boot or Tomcat 구조였고 이 환경에 익숙한 상태였습니다.

그러나 이번 인수인계받은 프로젝트는 Apache + Tomcat + Spring MVC 구조였습니다.

프로젝트를 개발하며 nginx 쪽에 설정해야 된 부분이 있는데 nginx가 없어 당황했는데요.

그러나 Apache가 그 역할을 동일하게 해주고 있다는 것을 이번 기회에 알게 되었습니다.

 

 

[현상]

이번 문제는 대용량 파일 업로드 개발 건 중 발생하였습니다.

파일 업로드 시 Max Upload Size 관련 설정이 필요하다는 것을 알고있었고, 설정이 들어갈 부분에 세팅해주었습니다.

그런데 100MB 파일 업로드시 잘 되었으나, 200MB 이상된 파일은 오류가 발생하는 것입니다.

300MB, 500MB 파일도 동일하게 발생하였고요.

로컬 환경이나 개발서버에서는 발생하지 않았던 문제입니다.

(원인을 발견하고 난 이후 알게 된 사실이지만 로컬 환경이나 개발서버에는 Apache가 세팅이 되어있지 않습니다. 그래서 테스트시에는 발생하지 않았습니다.)

 

 

파일 업로드 시 오류 발생한 경우(200MB 이상 파일)

 

 

파일 업로드시 정상 처리된 경우(100MB 이하 파일)

 

 

[원인]

오류가 나온 패턴을 보니 업로드 20초 경과 시 오류로 리턴되는 것을 보고 Send Request Timeout 쪽이 문제이지 않을까 방향을 잡고 구글링을 하였습니다.

역시 구글 검색은 가장 첫 번째 결과로 해결책을 보여주네요.

Apache 설정을 통해 Request Read Timeout 시간을 설정할 수 있었습니다.

좀 더 디테일하게 handshake, header, body 각각 초단위로 설정이 가능했습니다.

그럼 알려준 방법을 적용해 보겠습니다.

 

 

[해결방법]

1) 우선 터미널 접속하여 apache 설치 경로를 찾아봅니다.

-> ps -ef | grep apache

 

2) 이렇게 입력하면 서버에 apache로 실행된 프로세서를 검색해서 보여줍니다.

apache 설치 경로

3) 아파치가 설치된 경로를 찾았으니 해당 폴더로 이동합니다.

apache 폴더 밑에 conf폴더에 설정 파일인 httpd.conf 가 있습니다.

vi로 httpd.conf 파일을 열어줍니다.

-> cd /usr/local/apache/conf

-> vi httpd.conf

 

4) 파일 가장 밑으로 이동하여 RequestReadTimeout 관련 설정을 넣어줍니다.

-> RequestReadTimeout handshake=5 header=10 body=30

 

5) 아파치 설정이 변경되었으니 재실행을 해보겠습니다.

apache 폴더 밑 bin폴더로 다시 이동합니다.

apachectl 파일로 restart 를 할 수 있습니다.

-> cd /usr/local/apache/bin

-> ./apachectl restart

 

6) 오류가 났던 200MB 이상 파일을 업로드해봅니다.

 

 

200MB이상 파일 업로드 시 20초 경과되어도 오류 없이 성공됨

 

 

 

[참고링크]

https://httpd.apache.org/docs/2.4/mod/mod_reqtimeout.html

  1. Allow for 5 seconds to complete the TLS handshake, 10 seconds to receive the request headers and 30 seconds for receiving the request body:
    RequestReadTimeout handshake=5 header=10 body=30

 

 

반응형
Comments