nginx: Đăng nhập hoàn thành yêu cầu / phản hồi với tất cả các tiêu đề?


44

Chúng tôi có một máy chủ ứng dụng đôi khi bị treo. Chúng tôi nghi ngờ đó là do một yêu cầu xấu từ khách hàng.

Nginx có thể ghi nhật ký yêu cầu / phản hồi đầy đủ (như fiddler chụp) vào các tệp không, vì vậy chúng ta có thể thấy các yêu cầu đã được gửi trước khi treo?

(Có lẽ chúng ta cần tránh pcap và cách tiếp cận đó và làm tất cả trong nginx)

Nếu nginx không phải là công cụ phù hợp cho việc này, thì (không phải là máy phân tích mạng) có thể là gì?


1
mitmproxy trong chế độ proxy ngược sẽ làm những gì bạn đang tìm kiếm.
Vivek Thomas

@VivekThomas đây là một câu hỏi nginx .... chúng tôi đã sử dụng nginx và sẽ không thay đổi.
samsmith

3
@samsmith Câu hỏi cũ, nhưng có lẽ điều này giúp người khác: bạn không phải từ bỏ nginx. Tùy thuộc vào hoàn cảnh, bạn có thể tạm thời định tuyến lại nginx sang một cổng khác, để cho phép mitmproxy chặn lưu lượng và hỗ trợ gỡ lỗi. Sau đó, sau khi hoàn thành, bạn có thể định tuyến lại nginx đến cổng ban đầu và tắt mitmproxy.
Per Lundberg

1
Bạn có thể sử dụng mô-đun bảo mật, có thể ghi lại các yêu cầu / phản hồi đầy đủ, xem nginx.com/blog/modsecurity-logging-and-debugging
Willem

Câu trả lời:


44

Để nhận nội dung yêu cầu được gửi bởi khách truy cập, hãy sử dụng client_body_in_file_only on;và ghi nhật ký tệp "tạm thời" được ghi vào nhật ký bằng cách thêm var $request_body_filevào định dạng nhật ký. Các tệp "tạm thời" sẽ được đặt trong thư mục client_temp theo mặc định.

Bạn cũng có thể đăng nhập tiêu đề yêu cầu $http_<header>và gửi tiêu đề với $sent_http_<header>.

Nếu bạn có yêu cầu cơ thể và tiêu đề, bạn sẽ có thể phát lại nó và nhận được phản hồi mà khách truy cập của bạn đã có.

Ngoài ra, một cái gì đó như gor rất cần được xem xét để bạn có thể phát lại lưu lượng truy cập trên một môi trường khác, nơi bạn có thể để nginx viết các tệp tạm thời này mà không gây ra vấn đề IO trong sản xuất (nginx sẽ không thanh lọc chúng với ongiá trị đó là lý do tại sao đó không phải là "tạm thời" trong trường hợp này).


1
@jwadsack Đọc câu trả lời cẩn thận.
Xavier Lucas

4
@XavierLucas Tôi nghĩ bạn đang cung cấp hai cách tiếp cận khác nhau. Tôi không nhận ra bạn đang nói cả hai client_body_in_file_only$http_<header>sẽ cần thiết. Tôi hiểu điều đó ngay bây giờ.
jwadsack

5
Bạn có thể vui lòng chia sẻ một mã chính xác hơn?
Velkan

3
Chắc chắn $ http <title> chỉ hữu ích nếu bạn biết trước tất cả các tên tiêu đề
Ed Randall

2
Ai đó có thể chia sẻ một đoạn thực tế của cấu hình nginx không?
Bây giờ là

17

mitmproxy dường như là công cụ phù hợp để làm những gì bạn đang yêu cầu.

mitmproxy là một proxy trung gian tương tác, có khả năng SSL cho HTTP với giao diện điều khiển.

mitmdump là phiên bản dòng lệnh của mitmproxy. Hãy suy nghĩ tcpdump cho HTTP.

Đặc trưng

  • Chặn các yêu cầu và phản hồi HTTP và sửa đổi chúng một cách nhanh chóng.
  • Lưu các cuộc hội thoại HTTP hoàn chỉnh để phát lại và phân tích sau này.
  • Phát lại phía máy khách của một cuộc hội thoại HTTP. Phát lại phản hồi HTTP của một máy chủ được ghi lại trước đó.
  • Đảo ngược chế độ proxy để chuyển tiếp lưu lượng đến một máy chủ được chỉ định.
  • Chế độ proxy trong suốt trên OSX và Linux.
  • Thực hiện các thay đổi theo kịch bản cho lưu lượng HTTP bằng Python.
  • Chứng chỉ SSL để đánh chặn được tạo ra một cách nhanh chóng.

Chế độ proxy ngược sẽ cho phép bạn nắm bắt yêu cầu và phản hồi giống như Fiddler.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.