2011-01-22 30 views
5

Tôi đã có apache như một máy chủ back-end, chạy các tập lệnh php và nginx như một máy chủ proxy ngược tương tác với nội dung tĩnh. Một tập lệnh php, cung cấp cho tôi ID của một số quy trình và sau đó thực hiện quá trình này (khá dài). Tôi cần phải vượt qua để trình duyệt chỉ ID của proccess đó.Nginx làm proxy ngược trong khi bỏ phiếu dài

// ... 
    ob_start(); 

    echo json_encode($arResult); // only this data should be passed to browser 

    $contentLength = ob_get_length(); 
    header('Connection: close'); 
    header('Content-Length: ' . $contentLength); 

    ob_end_flush(); 
    ob_flush(); 
    flush(); 
    // then performed a long process 

(tôi kiểm tra tình trạng của proccess với một ajax-script)

này hoạt động tốt dưới một mình apache. Nhưng tôi có vấn đề khi apache là đằng sau nginx. Trong trường hợp này, tôi chỉ nhận được phản hồi khi quá trình xử lý hoàn tất.

thiết lập nginx:

server { 
    #... 
    proxy_set_header Connection close; 

    proxy_pass_header Content-Length; 
    #... 
} 

Nhưng tôi vẫn nhận được kết nối giữ-sống trong Firebug.

Làm thế nào tôi có thể nhận nginx ngay lập tức đưa ra phản hồi từ apache?

Hy vọng câu hỏi là rõ ràng.

Cảm ơn.

+1

bạn đã thử proxy_buffering tắt trong nginx? Không chắc chắn nó sẽ đóng kết nối nhưng ít nhất là phản ứng sẽ được truyền như là cho khách hàng. – regilero

+0

@regilero hoạt động! Tôi đoán kết hợp với một số chỉ thị 'vị trí' tôi sẽ nhận được proxy_buffering làm việc cho phần còn lại nội dung và giải pháp làm việc cho kịch bản của tôi. Bạn nên đăng bài này như một câu trả lời. – SaltLake

Trả lời

5

Bạn đã thử tắt proxy_buffering trong nginx chưa? Không chắc chắn nó sẽ đóng kết nối nhưng ít nhất là phản ứng sẽ được truyền như là cho khách hàng. :-)

0

Nginx không hỗ trợ bất kỳ phương thức flush() nào trong PHP khi được sử dụng trong sơ đồ fastcgi hoặc reverse_proxy.

Tôi đã thử nghiệm tất cả nhiều cấu hình proxy_buffering_ *, buffer_size_ * mà không thành công dưới nginx/0.8.49. Nó sẽ luôn đợi cho đến khi quá trình PHP thoát.

+0

Nginx không hỗ trợ kiểm soát bộ đệm đầu ra khi được sử dụng với php như fastcgi? – SaltLake

Các vấn đề liên quan