2015-08-04 19 views
8

tôi nhận được lỗi như thế này:Nginx ngược dòng gửi tiêu đề quá lớn trong khi đọc tiêu đề phản hồi từ thượng nguồn

[error] 27544#0: *47335682 upstream sent too big header while reading response 
header from upstream, client: 88.88.88.88, server: example..com, 
request: "POST /tool/ HTTP/1.1", upstream: "http://88.88.88.88:7080/tool/", 
host: "example.com" 

Về câu hỏi này, chúng ta có thể làm tăng kích thước bộ đệm từ file conf nginx như thế này: upstream sent too big header while reading response header from upstream

http { 
    proxy_buffer_size 128k; 
    proxy_buffers 4 256k; 
    proxy_busy_buffers_size 256k; 
} 

location 
     fastcgi_buffers 16 16k; 
     fastcgi_buffer_size 32k; 

(để tham khảo trong tương lai, kích thước mặc định cho fastcgi_buffer_size và fastcgi_buffers là 4k hoặc 8k, liên quan đến nền tảng)

Thị s văn bản xuất hiện trong trình duyệt của người dùng: Nginx 502 Bad Gateway

Tôi đang lập kế hoạch tạm thời tăng dung lượng bộ đệm. Sau đó, tôi có thể đăng nhập khi bộ đệm quá lớn. Có thể tìm ra các tiêu đề quá lớn đối với thượng nguồn không? apache_response_headers() và headers_list() không cung cấp cho tôi tất cả các tiêu đề phản hồi. Nó chỉ cho tôi hết hạn, kiểm soát bộ nhớ cache và tiêu đề pragma.

Thay đổi proxy_buffer_size có gây ra vấn đề về hiệu suất không?

(nginx phiên bản: nginx/1.6.0, php 5.4.42, XCache 3.2)

+0

Check-out http://stackoverflow.com/questions/ 13894386/upstream-quá-big-nginx-codeigniter nó shoul trả lời câu hỏi của bạn. –

+0

Câu hỏi của bạn có ý nghĩa gì? Làm thế nào bạn có thể kiểm tra các tiêu đề với nginx? Đó là một máy chủ web, không phải là một trình soạn thảo hoặc công cụ tìm kiếm lưu lượng truy cập. Nếu bạn muốn kiểm tra các tiêu đề, tôi khuyên bạn nên sử dụng tcpdump. – cnst

+0

Tăng kích thước bộ đệm tạm thời và ghi nhật ký tiêu đề lớn cũng là một tùy chọn. Nhưng php headers_list không cung cấp dữ liệu này. – trante

Trả lời

11

Bạn có thể dễ dàng tìm thấy một câu trả lời trên SO, nhưng những gì thực sự tạo ra một sự khác biệt là tùy chọn cấu hình duy nhất:

http { 
    fastcgi_buffer_size 32k; 
} 

Tuy nhiên, đề xuất này có lẽ không phải là điều bạn muốn. Chúng ta hãy xem qua chi tiết tại sao điều đó giúp giải quyết vấn đề:

fastcgi_buffer:

Cú pháp: fastcgi_buffers kích thước số;

Mặc định: fastcgi_buffers 8 4k | 8k;

Bối cảnh: http, máy chủ, vị trí

Thiết lập số lượng và kích thước của bộ đệm dùng để đọc một phản ứng từ máy chủ FastCGI, cho một kết nối duy nhất. Theo mặc định, kích thước bộ đệm bằng một trang bộ nhớ. Đây là 4K hoặc 8K, tùy thuộc vào nền tảng.

fastcgi_buffer_size:

Cú pháp: kích thước fastcgi_buffer_size;

Mặc định: fastcgi_buffer_size 4k | 8k;

Bối cảnh: http, máy chủ, vị trí

Thiết lập kích thước của bộ đệm dùng để đọc phần đầu tiên của phản ứng nhận từ máy chủ FastCGI. Phần này thường chứa tiêu đề phản hồi nhỏ. Theo mặc định, kích thước bộ đệm bằng trang bộ nhớ. Đây là 4K hoặc 8K, tùy thuộc vào nền tảng. Tuy nhiên, có thể được thực hiện nhỏ hơn.

Vì vậy, chỉ có fastcgi_buffer_size tạo sự khác biệt vì tiêu đề phản hồi không vừa với bộ đệm 4KB. Hầu hết thời gian xảy ra do kích thước cookie lớn. Do đó, bạn nên để nguyên cài đặt nhưng thay vì giảm kích thước cookie và chỉ có một lượng dữ liệu tối thiểu được lưu trữ ở đó như user_id, session_id, do đó lưu trữ cookie ý tưởng chung là dành cho các ID không nhạy cảm. Một số trình duyệt không xử lý tốt các cookie lớn.

Vì vậy, các giải pháp sẽ là:

1. Reduce cookie size 

2. Get back to original settings 

http { 
    fastcgi_buffers 8 4k; 
    fastcgi_buffer_size 4k; 
} 

Trong trường hợp khó khăn với giảm kích thước Cookie tắt đệm cho một số vị trí:

location /request { 
    fastcgi_buffering off; 
} 
+0

Trong trường hợp tạm thời tăng kích thước bộ đệm và ghi lại tất cả các yêu cầu có kích thước tiêu đề lớn, làm thế nào tôi có thể đăng nhập tiêu đề trong php? Tôi đã thử apache_response_headers(), headers_list() nhưng họ chỉ cung cấp những dữ liệu sau: Expires, Cache-Control, Pragma. Và dữ liệu này là nhỏ để không phù hợp với kích thước bộ đệm cũ. – trante

+0

Tôi gặp vấn đề này với ownCloud. Làm thế nào để giảm kích thước cookie? – danger89

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