ESP32-CAM MJPEG流经Nginx代理后Chrome/Edge报431请求头过大错误
解决Chrome/Edge访问代理后的ESP32-CAM MJPEG流报431错误的问题
核心问题分析
你的Nginx配置错误套用了WebSocket代理规则,但ESP32-CAM的MJPEG视频流是基于HTTP长连接的普通请求,并非WebSocket。额外添加的Upgrade/Connection头会导致Chrome/Edge的请求头处理异常,触发431错误;而Firefox对这类冗余头的兼容性更强,所以能正常工作。另外你的Host头配置存在语法错误(Host ,my_domain>),这也会加剧头信息异常。
修复步骤
1. 修正Nginx代理配置
删除WebSocket相关代理头,调整为适配HTTP长连接的MJPEG代理配置:
location / { proxy_pass http://192.168.1.69:80/; proxy_http_version 1.1; # 保留必要转发头,移除WebSocket相关配置 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; # 针对MJPEG长连接添加超时配置,避免连接过早断开 proxy_connect_timeout 60s; proxy_send_timeout 300s; proxy_read_timeout 300s; proxy_buffering off; # 禁用缓冲,确保MJPEG流实时传输 }
2. 验证请求头合理性
Chrome的请求头本身大小正常,错误由Nginx的冗余代理头引发。修复配置后,Chrome会发送标准HTTP请求头,不会触发431错误。
3. 可选:调整Nginx请求头大小限制(若仍有问题)
如果修复后仍出现431,可在http/server块中添加头大小限制配置:
http { ... client_header_buffer_size 1k; large_client_header_buffers 4 4k; ... }
验证方法
重启Nginx服务(sudo nginx -s reload),用Chrome/Edge访问你的HTTPS域名,查看MJPEG流是否正常加载。
内容的提问来源于stack exchange,提问作者ianc
相关产品推荐
相关产品推荐

