You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 00:21:27