Redmine 5.1.1(Docker)遇Puma::HttpParserError请求格式错误求助
解决Redmine 5.1.1升级后Puma::HttpParserError问题
1. 检查Nginx反向代理配置
- 确保Nginx与Puma的连接使用纯HTTP协议,
proxy_pass指向Puma容器的HTTP端口(默认3000),示例配置:location / { proxy_pass http://redmine:3000; # 此处必须用HTTP,禁止用HTTPS proxy_set_header Host $host; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Forwarded-Proto $scheme; # 正确传递HTTPS协议标识给Redmine } - 移除Nginx中所有针对Puma连接的SSL相关指令(如
proxy_ssl_verify、proxy_ssl_certificate等),SSL终止逻辑仅由Nginx处理。
2. 修正PHP脚本的API请求目标
- 确认脚本请求的是Nginx的HTTPS地址(而非直接指向Puma的HTTP端口),例如
https://your-redmine-domain/api/v2/issues.json,而非http://puma-ip:3000/...。 - 检查PHP请求库(如cURL)配置,确保没有强制向HTTP端口发送SSL请求的参数。若使用cURL,无需刻意关闭
CURLOPT_SSL_VERIFYPEER(测试环境除外),核心是请求地址必须指向Nginx的HTTPS入口。
3. 确认Redmine容器的Puma配置
- Docker环境下,官方Redmine 5.x镜像默认Puma不启用SSL,无需额外修改。若自定义了
config/puma.rb,需删除或注释所有SSL相关配置:# 以下SSL配置需完全注释或删除 # ssl_certificate '/path/to/cert.pem' # ssl_certificate_key '/path/to/key.pem' - 验证容器端口映射:Docker Compose或run命令中,Puma端口(默认3000)仅以HTTP方式映射,无需配置SSL端口。
4. 验证请求链路
- 直接测试Puma服务:执行
curl http://[容器IP或内部域名]:3000/issues.json(需携带Redmine认证头),确认返回正常JSON数据。 - 测试Nginx反向代理:执行
curl https://your-redmine-domain/issues.json,确认返回结果与直接访问Puma一致。
内容的提问来源于stack exchange,提问作者Pavel Shtanko
相关产品推荐
相关产品推荐

