Chuyển tới nội dung chính

HTTP Header Max Size Adjustment

Hướng dẫn này cung cấp hướng dẫn chi tiết về cách điều chỉnh giới hạn kích thước bộ đệm và thân liên quan đến các yêu cầu HTTP trong môi trường Kong Gateway và NGINX Ingress trên Kubernetes. Những cấu hình này giúp ngăn chặn các lỗi yêu cầu do tiêu đề hoặc tải lớn.

Tổng quan

Kong sử dụng một động cơ NGINX nhúng để xử lý lưu lượng HTTP. Theo mặc định, NGINX áp dụng các giới hạn kích thước bảo thủ cho các tiêu đề và thân yêu cầu. Trong các môi trường sản xuất, đặc biệt khi xử lý: Các tiêu đề yêu cầu lớn (ví dụ: mã thông báo JWT, cookie, user-agent), các thân yêu cầu lớn (ví dụ: tải tệp), hoặc độ đồng thời cao với các biến đổi yêu cầu,…

Các giới hạn này phải được tăng lên để tránh các lỗi như:

  • 400 Bad Request – Tiêu đề yêu cầu hoặc cookie quá lớn
  • 413 Request Entity Too Large

Hướng dẫn này giải thích cách điều chỉnh các giới hạn này theo ba cách khác nhau:

  1. Thông qua Triển khai Kong hoặc JSON Cấu hình Kong
  2. Thông qua ConfigMap của Bộ điều khiển NGINX Ingress
  3. Thông qua Chú thích Tài nguyên Ingress (theo dịch vụ)

Các Tham số Cấu hình Chính (Phân tích Chi tiết)

nginx_http_client_header_buffer_size

  • Mô tả: Đặt kích thước của một bộ đệm đơn được sử dụng khi đọc các tiêu đề yêu cầu của khách hàng.
  • Mặc định: 1k
  • Khi nào cần điều chỉnh: Nếu các tiêu đề yêu cầu như Authorization, Cookie, User-Agent trở nên quá dài (ví dụ: mã thông báo SSO hoặc tiêu đề nhiều cookie).
  • Đề xuất: Tăng lên 4k hoặc 8k để đảm bảo tính ổn định.
  • Cảnh báo: Đặt quá lớn có thể làm tăng mức sử dụng bộ nhớ dưới độ đồng thời cao.

nginx_http_large_client_header_buffers

  • Mô tả: Cấu hình số lượng và kích thước của các bộ đệm cho các tiêu đề yêu cầu lớn (ví dụ: cookie nhiều người nhận).
  • Mặc định: 4 8k (4 bộ đệm mỗi bộ 8k)
  • Khi nào cần sửa đổi: Nếu gặp lỗi 400 Bad Request – Tiêu đề yêu cầu hoặc Cookie quá lớn.
  • Khuyến nghị: Tăng lên 4 16k hoặc 8 16k.
  • Cảnh báo: Chỉ mở rộng khi cần thiết để tránh quá tải bộ nhớ không cần thiết.

nginx_http_client_max_body_size

  • Mô tả: Xác định kích thước tối đa của thân yêu cầu mà Kong chấp nhận dựa trên Content-Length.
  • Mặc định: 0 (không giới hạn)
  • Khi nào cần sửa đổi: Để ngăn chặn các tải trọng thân quá lớn (ví dụ: tải lên tệp lớn) gây ra lỗi 413.
  • Khuyến nghị: Đặt theo mức sử dụng dự kiến, ví dụ: 10m, 50m.
  • Cảnh báo: Các yêu cầu vượt quá kích thước này sẽ kích hoạt phản hồi 413 từ Kong.

nginx_admin_client_max_body_size

  • Mô tả: Đặt kích thước thân tối đa được chấp nhận bởi Admin API.
  • Mặc định: 10m
  • Khi nào cần sửa đổi: Khi gửi các tải trọng cấu hình lớn đến Admin API (ví dụ: đăng ký tuyến hàng loạt).
  • Khuyến nghị: 20m đến 50m nếu cần.
  • Cảnh báo: Vì Admin API rất nhạy cảm, việc tăng quá nhiều có thể gây ra rủi ro bảo mật.

nginx_http_client_body_buffer_size

  • Mô tả: Kích thước bộ đệm để đọc thân yêu cầu vào bộ nhớ. Nếu thân vượt quá kích thước này, nó sẽ được ghi vào đĩa.
  • Mặc định: 8k
  • Khi nào cần sửa đổi: Khi sử dụng các plugin thao tác thân như request-transformer, giới hạn tỷ lệ, v.v., để tránh ghi vào đĩa.
  • Khuyến nghị: Khớp với client_max_body_size, ví dụ: 50m.
  • Cảnh báo: Các giá trị lớn làm tăng mức tiêu thụ bộ nhớ (cân nhắc độ đồng thời của yêu cầu khi thiết lập).

nginx_admin_client_body_buffer_size

  • Mô tả: Giống như trên, nhưng cho các thân yêu cầu của Admin API.
  • Mặc định: 10m
  • Khuyến nghị: Mở rộng dựa trên khối lượng công việc của Admin API.

Phương pháp cấu hình

Phương pháp 1: Triển khai Kong hoặc Cấu hình Bảng điều khiển APIM

Chỉ áp dụng cho NGINX nội bộ chạy bên trong các pod Kong Gateway.

Tùy chọn A – Chỉnh sửa Biến Môi Trường Triển Khai Kong

- name: KONG_NGINX_HTTP_CLIENT_HEADER_BUFFER_SIZE
value: "4k"
- name: KONG_NGINX_HTTP_LARGE_CLIENT_HEADER_BUFFERS
value: "4 16k"
- name: KONG_NGINX_HTTP_CLIENT_MAX_BODY_SIZE
value: "50m"
- name: KONG_NGINX_ADMIN_CLIENT_MAX_BODY_SIZE
value: "20m"
- name: KONG_NGINX_HTTP_CLIENT_BODY_BUFFER_SIZE
value: "50m"

Tùy chọn B – Chỉnh sửa thông qua JSON Cấu Hình Kong trong Bảng Điều Khiển APIM

{
"nginx_http_client_body_buffer_size": "8k",
"nginx_proxy_buffer_size": "16k",
"nginx_proxy_buffers": "10 16k",
"nginx_proxy_busy_buffers_size": "64k"
}

Sau khi thay đổi, khởi động lại các pod Kong:

kubectl rollout restart deployment kong -n <namespace>

Phương pháp 2: ConfigMap Bộ Điều Khiển NGINX Ingress

Áp dụng cho tất cả lưu lượng được định tuyến qua Bộ Điều Khiển NGINX Ingress.

Ví dụ:

apiVersion: v1
kind: ConfigMap
metadata:
name: nginx-configuration
namespace: ingress-nginx
data:
proxy-body-size: "50m"
client-header-buffer-size: "4k"
large-client-header-buffers: "4 16k"
client-body-buffer-size: "50m"

Khởi động lại Bộ Điều Khiển Ingress sau khi áp dụng thay đổi:

kubectl rollout restart deployment ingress-nginx-controller -n ingress-nginx

Phương pháp 3: Chú Thích Tài Nguyên Ingress

Chỉ áp dụng cho một dịch vụ cụ thể thông qua các chú thích trong bản khai Ingress.

Ví dụ:

apiVersion: [networking.k8s.io/v1](http://networking.k8s.io/v1)
kind: Ingress
metadata:
name: my-ingress
namespace: your-namespace
annotations:
[nginx.ingress.kubernetes.io/proxy-body-size:](http://nginx.ingress.kubernetes.io/proxy-body-size:) "50m"
[nginx.ingress.kubernetes.io/client-body-buffer-size:](http://nginx.ingress.kubernetes.io/client-body-buffer-size:) "50m"
spec:
ingressClassName: nginx
rules:
- host: your.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: your-service
port:
number: 80

Đây là cấp độ kiểm soát chi tiết nhất và có ưu tiên cao nhất so với các cài đặt toàn cầu.

Thứ tự ưu tiên của ứng dụng

Khi nhiều cài đặt đồng thời tồn tại, hệ thống sẽ giải quyết chúng theo thứ tự ưu tiên sau:

  1. Chú thích Tài nguyên Ingress (ghi đè cấp độ dịch vụ cụ thể)
  2. NGINX Ingress ConfigMap (áp dụng toàn cầu cho tất cả các tài nguyên Ingress)
  3. Triển khai Kong Gateway / Cấu hình Kong (nội bộ chỉ cho proxy Kong)

Bảng tóm tắt

Use CaseRelevant Parameters
Tiêu đề lớnnginx_http_client_header_buffer_size, nginx_http_large_client_header_buffers
Thân lớn (khách hàng)nginx_http_client_max_body_size, nginx_http_client_body_buffer_size
Thân lớn (Admin API)nginx_admin_client_max_body_size, nginx_admin_client_body_buffer_size
Giới hạn toàn bộ IngressSử dụng ConfigMap với proxy-body-size, client-body-buffer-size, v.v.
Ghi đè theo dịch vụSử dụng chú thích Ingress (ví dụ: proxy-body-size, client-body-buffer-size)