apache不解析json,仅负责转发;需确保content-type为application/json、启用mod_deflate压缩、透传x-forwarded-*头供后端获取真实ip和协议,并用proxybadheader ignore避免非法set-cookie导致500错误。

Apache 本身不解析或修改 JSON 数据,它的角色是安全、高效地转发请求和响应。配置重点在于:确保 JSON 能被正确识别、压缩传输、不被错误改写,并让后端真实 IP 和协议信息可被应用准确获取。
确保 JSON 响应头正确且可识别
后端返回的 Content-Type 必须明确为 application/json(不含多余参数),否则 Apache 的过滤或压缩模块可能跳过处理。如果后端返回的是 application/json; charset=utf-8,建议在代理层统一标准化:
- 用
Header always set Content-Type "application/json; charset=utf-8"强制设置(需启用mod_headers) - 或在后端代码中规范输出,避免带空格或非常规参数
- 静态 .json 文件需配置 MIME 类型:
AddType application/json .json
启用 GZIP 压缩提升传输效率
JSON 文本重复度高,压缩收益明显。确认已启用 mod_deflate,并在配置中加入:
使用 JSON Schema 验证 JSON 数据,从示例 JSON 生成 schema,并将其转换为 TypeScript 接口、Python 数据类或 Markdown 文档。
<ifmodule mod_deflate.c></ifmodule>AddOutputFilterByType DEFLATE application/jsonAddOutputFilterByType DEFLATE text/plain
注意:若后续要使用 mod_substitute 做响应体脱敏,需先关闭压缩(SetEnv no-gzip 1),否则正则无法跨行匹配。
配合反向代理正确透传客户端信息
后端应用依赖真实 IP 和协议生成链接、做风控或记录日志。仅靠 ProxyPass 不够,必须组合以下配置:
-
ProxyPreserveHost On:把原始 Host 头(如api.example.com)传给后端,避免 Spring Boot 生成内网跳转地址 -
RequestHeader set X-Forwarded-For "%{REMOTE_ADDR}e" env=REDIRECT_REMOTE_ADDR:安全注入真实客户端 IP -
RequestHeader set X-Forwarded-Proto "https" env=HTTPS:标识是否经 HTTPS 访问 - 后端应用必须主动读取这些头,例如 Spring Boot 配置
server.forward-headers-strategy: native
避免 JSON 响应被意外截断或污染
某些 Java 框架(如 Spring Session)会在一个响应里写多个 Set-Cookie 头,违反 HTTP/1.1 规范,导致 Apache 默认丢弃整个响应体并报 500 错误:
- 加一行
ProxyBadHeader Ignore,让 Apache 忽略非法头,只警告不中断 - 检查后端是否启用了不必要的响应头(如
X-Powered-By),可用Header unset移除 - 禁用
mod_proxy_html(除非真要重写 HTML 中的 URL),它对 JSON 无用且可能破坏结构










