Cửa hàng Magento đa ngôn ngữ hoạt động với Varnish như thế nào. Có cấu hình nào có sẵn trong véc ni, vì vậy chúng tôi có thể tạo cơ sở bộ nhớ cache trên cookie không?Cửa hàng laguage Magento Multi với véc ni
Trả lời
Nếu bạn không nhớ các ngôn ngữ được tại các url khác nhau, Turpentine có thể xử lý việc này cho bạn: https://github.com/nexcess/magento-turpentine/issues/36
Nếu bạn muốn họ cư xử như họ làm ra khỏi hộp, cho phép tiếp tục.
Bạn phải thay đổi như thế nào véc ni tạo ra có trong VCL tham khảo của bạn: https://www.varnish-cache.org/trac/wiki/VCLExampleCachingLoggedInUsers
Chúng tôi sẽ sửa đổi này cũng phải đưa vào tài khoản các cookie lưu trữ mà bộ Magento dựa trên bộ chọn ngôn ngữ. (Thực hiện theo hành vi ở đây: http://demo.magentocommerce.com) Thật không may điều này trở nên khó khăn vì Varnish có xu hướng không chuyển cookie trở lại máy chủ hoặc không lưu vào bộ nhớ cache khi thấy cookie bay quanh
Điều này sẽ có bộ nhớ cache Varnish dựa trên giá trị của cookie cũng như các url mặc định và host:
sub vcl_hash {
hash_data(req.url);
hash_data(req.http.host);
if (req.http.Cookie ~ "(?:^|;\s*)(?:store=(.*?))(?:;|$)"){
hash_data(regsub(req.http.Cookie, "(?:^|;\s*)(?:store=(.*?))(?:;|$)"));
}
return (hash);
}
Nhưng, với phương pháp này bạn có thể phải tinh chỉnh phần còn lại của VCL của bạn để cache trang đúng cách và gửi các tập tin cookie lại cho máy chủ
Một lựa chọn khác là sử dụng cookie để thay đổi bộ nhớ đệm trên một tiêu đề tùy ý, cho phép gọi nó là X-Mage-L ang:
sub vcl_fetch {
#can do this better with regex
if (req.http.Cookie ~ "(?:^|;\s*)(?:store=(.*?))(?:;|$)"){
if (!beresp.http.Vary) { # no Vary at all
set beresp.http.Vary = "X-Mage-Lang";
} elseif (beresp.http.Vary !~ "X-Mage-Lang") { # add to existing Vary
set beresp.http.Vary = beresp.http.Vary + ", X-Mage-Lang";
}
}
# comment this out if you don't want the client to know your classification
set beresp.http.X-Mage-Lang = regsub(req.http.Cookie, "(?:^|;\s*)(?:store=(.*?))(?:;|$)");
}
Mô hình này cũng được sử dụng để phát hiện thiết bị với véc ni: https://github.com/varnish/varnish-devicedetect/blob/master/INSTALL.rst
Sau đó, bạn sẽ phải mở rộng Mage_Core_Model_App sử dụng tiêu đề này thay cho 'cửa hàng' cookie. Trong Magento CE 1,7 _checkCookieStore của nó:
protected function _checkCookieStore($type)
{
if (!$this->getCookie()->get()) {
return $this;
}
$store = $this->getCookie()->get(Mage_Core_Model_Store::COOKIE_NAME);
if ($store && isset($this->_stores[$store])
&& $this->_stores[$store]->getId()
&& $this->_stores[$store]->getIsActive()) {
if ($type == 'website'
&& $this->_stores[$store]->getWebsiteId() == $this->_stores[$this->_currentStore]->getWebsiteId()) {
$this->_currentStore = $store;
}
if ($type == 'group'
&& $this->_stores[$store]->getGroupId() == $this->_stores[$this->_currentStore]->getGroupId()) {
$this->_currentStore = $store;
}
if ($type == 'store') {
$this->_currentStore = $store;
}
}
return $this;
}
Bạn sẽ thiết lập các cửa hàng hiện hành về $ _SERVER [ 'X-Mage-Lang'] thay vì cookie
Add Sau dòng trong Varnish Config,
if(beresp.http.Set-Cookie) {
return (hit_for_pass);
}
ảnh hưởng của những dòng này là gì? Đây có phải là câu trả lời ngắn nhất hay chỉ là câu trả lời ngắn nhất? ;) – fbtb
Sử dụng bộ nhớ đệm giải pháp cookie sẽ chỉ áp dụng cho một người dùng. –
Đây không phải là cookie phiên, nó kích hoạt giá trị của cookie có ngôn ngữ trong đó – timbroder
Ok, lỗi của tôi. Anway tổng quan đẹp. –