Khám Phá Không Gian Mới Rộng Lớn Hơn - Sắc Màu Hà Nội

Khám Phá Không Gian Mới Rộng Lớn Hơn

Danh mục: PHP

!Ghi lại sự cố PHP không nhận được dữ liệu POST

Ghi lại sự cố PHP không nhận được dữ liệu POST

Hệ thống hoạt động trong môi trường OpenResty + PHP + Linux với toàn bộ dịch vụ chạy trên Docker. Dịch vụ gửi yêu cầu được viết bằng Golang, trong khi phía nhận dữ liệu là PHP, nhằm thực hiện cơ chế kiểm soát luồng và xác thực tài nguyên frp. Tuy nhiên, trên hệ thống A xây dựng từ code thuần, chúng tôi liên tục gặp vấn đề không thể nhận được dữ liệu đầy đủ…

Mô tả hệ thống

  • Môi trường triển khai: OpenResty kết hợp PHP-FPM trên nền tảng Linux
  • Công cụ container hóa: Tất cả dịch vụ được đóng gói trong Docker
  • Phía client: Ứng dụng Golang thực hiện gửi request dạng POST
  • Mục đích sử dụng: Xây dựng hệ thống kiểm soát truy cập và giới hạn băng thông cho kết nối frp

Hiện tượng bất thường

Dù request từ Golang đã được xác nhận gửi đi thành công và network capture cho thấy gói tin đã đến server, nhưng bên phía PHP xử lý không nhận được dữ liệu POST. Điều này gây gián đoạn nghiêm trọng đến quy trình xác thực và kiểm soát lưu lượng tự động.

Kiểm tra ban đầu

  1. Kiểm tra cấu hình OpenResty:

    • Xác minh các chỉ thị xử lý request body như client_body_buffer_size
    • Đảm bảo không có quy tắc chặn hoặc sửa đổi header nào được áp dụng
  2. Kiểm tra phương thức nhận dữ liệu PHP:

    1
    2
    3
    4
    
    // Cần sử dụng đúng phương pháp đọc raw input
    $rawData = file_get_contents("php://input");
    // hoặc với ứng dụng framework
    $request->getContent();
  3. Kiểm tra cấu trúc dữ liệu gửi từ Golang:

    • Đảm bảo thiết lập đúng Content-Type (application/json hoặc application/x-www-form-urlencoded)
    • Kiểm tra độ dài dữ liệu có vượt quá giới hạn cho phép

Cảnh báo thường gặp

  • Vấn đề với reverse proxy: OpenResty có thể buffer request body gây mất dữ liệu nếu cấu hình không hợp lý
  • Lỗi thiết lập Content-Type: PHP sẽ bỏ qua dữ liệu nếu header này không được thiết lập chính xác
  • Giới hạn upload: Cần kiểm tra các thông số như client_max_body_size trong Nginx/OpenResty

Chúng tôi đang tiếp tục điều tra nguyên nhân gốc rễ và sẽ cập nhật thông tin chi tiết về giải pháp khắc phục trong các bài viết tiếp theo.

0%