Ngăn Wordpress gửi tiêu đề http kiểm soát bộ đệm


9

Trang web của tôi nằm trên một máy chủ sử dụng Varnish như một công cụ lưu trữ (mạnh mẽ). Thật không may, có vẻ như wordpress đang phá vỡ bộ đệm Varnish bằng cách gửi tiêu đề http kiểm soát bộ đệm. Nếu curl -I domain.comtôi nhận được:

HTTP/1.1 200 OK
Server: Apache/2.4.10
X-Powered-By: PHP/5.4.4-14+deb7u14
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Set-Cookie: PHPSESSID=e00738aoughg407ljm270kj0l6; path=/
Content-Type: text/html; charset=UTF-8
Accept-Ranges: bytes
Date: Fri, 31 Oct 2014 21:44:16 GMT
Connection: keep-alive
Via: 1.1 varnish
Age: 0

Tôi có các trang wordpress khác được lưu trữ trên máy chủ này, hoạt động chính xác với máy chủ Varnish, vì vậy tôi khá chắc chắn rằng vấn đề là do cài đặt cụ thể này gây ra. Đây là những gì tôi đã cố gắng:

  • vô hiệu hóa tất cả các plugin. Bộ nhớ cache Varnish trống, sau đó curl -I: kết quả tương tự.
  • xem qua tất cả các tập tin chủ đề của tôi. Không có gì đáng nghi ngờ.

Bạn có ý tưởng nào khác về những gì có thể gây ra vấn đề không?


Từ tìm kiếm nhanh, tôi không thể tìm thấy một trường hợp nào no-stoređược sử dụng trong lõi. Tôi nghi ngờ điều này đến từ chính WP.
Rarst

Như Rarst lưu ý, không có cửa hàng nào không được sử dụng, nhưng nếu nó hữu ích cho người khác thì WP sẽ gửi không có bộ đệm, phải xác nhận lại, max-age = 0 và một vài thứ khác cho người dùng đã đăng nhập .
El Yobo

Câu trả lời:


6

Nhờ câu trả lời của @ chrisguitarguy, bạn có thể kiểm soát các tiêu đề http được gửi bởi Wordpress thông qua hook "send_headers". Đây là chức năng tôi đã thêm vào tệp tin.php của chủ đề và đã giải quyết vấn đề với máy chủ Varnish.

function varnish_safe_http_headers() {
    header( 'X-UA-Compatible: IE=edge,chrome=1' );
    session_cache_limiter('');
    header("Cache-Control: public, s-maxage=120");
  if( !session_id() )
  {
    session_start();
  }
}
add_action( 'send_headers', 'varnish_safe_http_headers' );

điều này bắt đầu một phiên php - có nghĩa là véc ni sẽ không bao giờ lưu trữ.
matpol

4

Bạn có thể nối vào wp_headersvà xóa các tiêu đề kiểm soát bộ đệm. Cache-ControlTuy nhiên, WordPress thường không gửi ngoại trừ khu vực quản trị hoặc yêu cầu ajax.

add_filter('wp_headers', 'wpse167128_nocache');
function wpse167128_nocache($headers)
{
    unset($headers['Cache-Control']);
    return $headers;
}

1
Đẹp. Bạn có biết nếu nó sẽ ghi đè bất kỳ (các) tiêu đề http tiếp theo được viết bởi các plugin của bên thứ ba không?
pixeline

Trong thực tế, hook thích hợp là "send_headers". Sẽ đăng giải pháp cuối cùng như một câu trả lời.
pixeline
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.