도커 컨테이너에서 애플리케이션을 실행하고 있습니다(https://github.com/filebrowser/filebrowser/) 매우 큰(>2GB) 파일을 업로드하려고 합니다. 컨테이너는 역방향 프록시를 통해 연결하는 localhost의 비표준 포트에 앱을 노출합니다(따라서 하나의 컴퓨터에서 여러 앱을 실행할 수 있음). 문제는 2097152바이트가 넘는 파일을 업로드할 때 오류가 발생한다는 것입니다. 파일이 nginx에 완전히 업로드되었고 부분적으로 contianerized 앱에 생성되었지만 오류가 발생하기 전에 2097152바이트에서 오랫동안 정지되어 컨테이너화된 앱에서 예기치 않은 EOF 오류가 발생하는 것을 볼 수 있습니다. 컨테이너화된 앱에 파일을 직접 업로드하면 제대로 작동하기 때문에 nginx에 문제가 있는 것 같습니다. nginx 구성에 다양한 지시문을 추가하려고 시도했지만 당황했습니다. 사이트의 내 nginx 구성은 다음과 같습니다.
server {
server_name example.com;
client_max_body_size 30g;
proxy_buffer_size 1024k;
proxy_buffers 4 1024k;
proxy_busy_buffers_size 1024k;
proxy_max_temp_file_size 10000m;
proxy_connect_timeout 10000;
proxy_send_timeout 10000;
proxy_read_timeout 10000;
send_timeout 10000;
client_header_timeout 10000;
client_body_timeout 10000;
location / {
proxy_pass http://localhost:8088/;
proxy_http_version 1.1;
proxy_cache_bypass $http_upgrade;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Port $server_port;
proxy_connect_timeout 10000s;
proxy_send_timeout 10000s;
proxy_read_timeout 10000s;
}}
nginx에서 발생하는 오류는 다음과 같습니다.
2022/04/14 20:26:56 [error] 3286524#3286524: *13184 connect() failed (111: Connection refused) while connecting to upstream, client: xxx.xxx.xxx.xxx, server: example.com, request: "POST /api/resources/Fedora-KDE-Live-x86_64-35-1.2.iso?override=false HTTP/1.1", upstream: "http://[::1]:8088/api/resources/Fedora-KDE-Live-x86_64-35-1.2.iso?override=false", host: "example.com", referrer: "https://example.com/files/"
편집: 많은 조사를 한 후에 해결책은 , 및 추가를 제거하는 것 같았습니다. proxy_buffer_size
이것이 proxy_buffers
작동 proxy_busy_buffer_size
하는 proxy_request_buffering off;
이유는 모르겠지만 작동합니다. 구성에서 수정된 줄은 다음과 같습니다.
# proxy_buffer_size 1024k;
# proxy_buffers 4 1024k;
# proxy_busy_buffers_size 1024k;
proxy_request_buffering off;
답변1
간단한 대답:
proxy_request_buffering off;
이것이 관련된 유일한 옵션이기 때문에 문제를 해결합니다.업로드(요청).
다른 모든 옵션은 다음에만 적용됩니다.다운로드클라이언트에게(응답). 문서에서 인용 :
proxy_buffer_size
... 첫 번째 부분을 읽는 데 사용되는 버퍼의 크기응답프록시 서버로부터 수신됨...
proxy_buffers
... 읽기에 사용되는 버퍼응답프록시 서버에서 ...
proxy_busy_buffers_size
... 버퍼링할 때응답프록시 서버에서 ...
답변2
2GB 제한에도 도달했습니다. proxy_request_buffering off;
나에게 효과가 없었습니다. 아래 두 가지 옵션을 /
위치에 추가하는 것이 나에게 도움이 된 유일한 방법입니다.
proxy_buffering off;
client_max_body_size 0;