MinIO를 nginx 리버스 프록시로 서비스하던 중 다음과 같은 오류가 발생했습니다.
브라우저 콘솔 오류:
Failed to load resource: net::ERR_HTTP2_PROTOCOL_ERROR
파일 다운로드 오류: TypeError: Failed to fetch
nginx 에러 로그:
[crit] open() "/var/cache/nginx/proxy_temp/4/56/0000027564" failed (13: Permission denied) while reading upstream,
client: 125.136.152.11, server: minio.example.com,
request: "GET /api/v1/buckets/bucket-name/objects/download?prefix=filename.exe&version_id=null HTTP/2.0"
/var/cache/nginx/proxy_temp/ 디렉토리 권한 부족으로 임시 파일 생성 실패/etc/nginx/nginx.conf 파일의 http 블록에 HTTP/2 관련 설정 추가:
http {
# 기존 설정들...
# HTTP/2 관련 설정 추가
http2_max_field_size 16k;
http2_max_header_size 32k;
# 나머지 설정들...
}
기존 설정:
server {
listen 443 ssl;
listen [::]:443 ssl;
http2 on;
server_name storage.example.com;
ssl_certificate /etc/nginx/example.com.crt;
ssl_certificate_key /etc/nginx/example.com.csr;
client_max_body_size 0;
location / {
add_header Last-Modified $http_date;
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_connect_timeout 300;
proxy_http_version 1.1;
proxy_set_header Connection "";
chunked_transfer_encoding off;
proxy_pass http://192.168.0.3:9000;
}
}
수정된 설정:
server {
listen 443 ssl;
listen [::]:443 ssl;
http2 on;
server_name storage.example.com;
ssl_certificate /etc/nginx/example.com.crt;
ssl_certificate_key /etc/nginx/example.com.csr;
client_max_body_size 0;
location / {
add_header Last-Modified $http_date;
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_connect_timeout 300;
proxy_http_version 1.1;
proxy_set_header Connection "";
chunked_transfer_encoding off;
# 버퍼링 비활성화로 임시 파일 생성 방지
proxy_buffering off;
proxy_request_buffering off;
# HTTP/2 push 비활성화
http2_push off;
proxy_pass http://192.168.0.3:9000;
}
}
server {
listen 443 ssl;
listen [::]:443 ssl;
http2 on;
server_name minio.example.com;
ssl_certificate /etc/nginx/example.com.crt;
ssl_certificate_key /etc/nginx/example.com.csr;
client_max_body_size 0;
location / {
proxy_set_header Host $http_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-NginX-Proxy true;
real_ip_header X-Real-IP;
proxy_connect_timeout 300;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
chunked_transfer_encoding off;
# 버퍼링 비활성화로 임시 파일 생성 방지
proxy_buffering off;
proxy_request_buffering off;
# HTTP/2 push 비활성화
http2_push off;
proxy_pass http://192.168.0.3:9001;
}
}
# nginx 캐시 디렉토리 권한 수정
sudo chown -R nginx:nginx /var/cache/nginx/
sudo chmod -R 755 /var/cache/nginx/
# 설정 문법 검사
sudo nginx -t
# nginx 재시작
sudo systemctl restart nginx
proxy_buffering off: nginx가 임시 파일을 생성하지 않도록 버퍼링 비활성화proxy_request_buffering off: 요청 버퍼링도 비활성화http2_push off: HTTP/2 서버 푸시 기능 비활성화설정 적용 후 다음을 확인:
# 에러 로그 실시간 모니터링
sudo tail -f /var/log/nginx/error.log