**问题:**用户登陆系统后进行操作,访问后端接口服务时前端出现400异常;
排查:
经过前端服务器日志(nginx)分析,在路由后端服务接口时出现问题。对用户操作进行复现,F12查看错误接口信息,发现接口请求头内容太多(请求头内带有的登陆用户及其所有权限信息)。
问题解决:
**1、**前端调整:
nginx配置增加:
http {
# 常规请求头缓冲区
client_header_buffer_size 16k;
# 大请求头缓冲区设置
large_client_header_buffers 4 256k;
# 请求头超时时间
client_header_timeout 60s;
# 限制单个头字段大小
http2_max_field_size 64k;
http2_max_header_size 512k;
server {
listen 80;
server_name example.com;
# 服务器级别的覆盖设置
client_header_buffer_size 32k;
large_client_header_buffers 8 32k;
location / {
# 特定 location 的设置
client_header_buffer_size 64k;
large_client_header_buffers 4 64k;
}
}
}
**2、**后端调整
后端容器服务增加配置:
env:
- name: SERVER_MAX_HTTP_HEADER_SIZE
value: "262144"
- name: SPRING_CLOUD_GATEWAY_HTTPCLIENT_MAX_HEADER_SIZE
value: "262144"
- name: JAVA_OPTS
value: "-Xmx512m -Xms256m -Dserver.max-http-header-size=262144"
3、ingress配置修改:
# 更新 nginx-ingress configmap
kubectl edit configmap nginx-config -n ingress-nginx
# 或者通过 helm 安装时配置
helm upgrade ingress-nginx ingress-nginx/ingress-nginx \
--namespace ingress-nginx \
--set controller.config.proxy-buffer-size="128k" \
--set controller.config.large-client-header-buffers="8 128k" \
--set controller.config.http2-max-header-size="512k"
备注:
模拟大请求头访问方法
# 测试直接响应
echo "1. 测试直接响应:"
curl -s -H "X-Test-Large: $(printf '%*s' 50000 | tr ' ' 'A')" \
http://nginx-service/debug-direct