При использовании Varnish с Magento. Varnish действует как внешний/прокси-сервер, а Magento действует как внутренний сервер. Таким образом, всякий раз, когда пользователь обращается/запрашивает URL-адрес вашего веб-сайта, он сначала попадает на интерфейс Varnish (), затем передает запрос на сервер Magento (), затем Magento обрабатывает запрос и снова передает запрос Varnish и, наконец, Varnish отправляет запрос/страницу веб-сайта пользователю.
Вот поток запросов:
User request (website URL) --> Varnish (frontend) --> Magento (backend) --> Varnish (frontend) --> User requested page (website URL)
Итак, в вашем сценарии у вас есть 2 сервера, как показано ниже.
Varnish Server (frontend): 129.89.188.245 on port 80
Magento 2 Server (backend): 129.89.188.244 on port 80
Надеюсь, вы создали файл конфигурации лака из панели администратора Magento. Если нет, вы можете сгенерировать его, выполнив следующие шаги, и настроить Varnish.
1. Log in to the Magento Admin as an administrator.
2. Click STORES > Configuration > ADVANCED > System > Full Page Cache.
3. From the Caching Application list, click Varnish Caching.
4. Enter a value in the TTL for public content field.
5. Expand Varnish Configuration and enter the following information:
Access list: Enter the fully qualified hostname, IP address for which to invalidate
content.
Backend host: Enter the fully qualified hostname or IP address and listen port of the Varnish backend or origin server; that is, the server providing the content Varnish will accelerate. Typically, this is your web server.
Backend port: Origin server's listen port.
6. Click Save Config.
7. Click on "Export VCL for Varnish 4" to create a default.vcl
8. Replace Varnish current default.vcl configuration file with the generated one and restart the Varnish service.
После этого измените Magento Базовый URL-адрес и Безопасный базовый URL-адрес на Varnish IP/домен.
Теперь, когда первый пользователь заходит на ваш веб-сайт с помощью URL/IP, Varnish извлекает страницу/контент из Magento и кэширует их, а затем возвращает пользователю. Когда второй пользователь запрашивает ту же страницу/контент, Varnish обслуживает его из кеша.
Надеюсь, это объяснение рассеет ваши сомнения.
Mac OSX tail
работает медленно.
brew install coreutils
, затем переключение на gtail
решает проблему.
leijurvs-MacBook-Pro:~ leijurv$ time cat /dev/zero | head -c 100000000 | tail -c +2 | shasum -a 256
f4be792b71a024a60d77b3ac4c1c2b88ac51480fa25f88d10865827f8c086506 -
cat /dev/zero 0.01s user 0.03s system 0% cpu 7.153 total
head -c 100000000 0.02s user 0.03s system 0% cpu 7.152 total
tail -c +2 7.07s user 0.03s system 99% cpu 7.159 total
shasum -a 256 0.51s user 0.06s system 7% cpu 7.154 total
leijurvs-MacBook-Pro:~ leijurv$ time cat /dev/zero | head -c 100000000 | gtail -c +2 | shasum -a 256
f4be792b71a024a60d77b3ac4c1c2b88ac51480fa25f88d10865827f8c086506 -
cat /dev/zero 0.00s user 0.02s system 4% cpu 0.497 total
head -c 100000000 0.02s user 0.08s system 18% cpu 0.496 total
gtail -c +2 0.05s user 0.10s system 30% cpu 0.496 total
shasum -a 256 0.47s user 0.02s system 99% cpu 0.496 total
leijurvs-MacBook-Pro:~ leijurv$
Если вы просто хотите пропустить первый байт файла перед передачей в shasum
, вы можете просто сделать (здесь, используя синтаксис zsh
, поскольку выходной формат time
предполагает, что это оболочка, которую вы используете.):
time cat /dev/zero | head -c 100000000 |
(LC_ALL=C read -u0 -k1 && shasum -a 256)
Тогда это означает отсутствие дополнительного процесса, этот первый байт был просто прочитан из конвейера с помощьюread
перед запуском shasum
.
То, что LC_ALL=C read -u0 -k1
является read
вводом 1
символа(k
здесь для клавиши , поскольку read -k
изначально предназначалось для чтения нажатий клавиш с терминала ), где символы здесь одиночные байт благодаря LC_ALL=C
, из файлового дескриптора u
nit number0
(stdin; здесь, чтобы сделать это явным, мы читаем из потока, а не из терминала ).
В оболочке bash
эквивалентной командойread
будет LC_ALL=C IFS= read -rd '' -n1
.
Эквивалент read -k
zsh обычно будет read -N
, но это не будет работать для ввода, содержащего байты NUL, которые bash
read
просто удаляют (также -N
, скопированные из ksh93. является относительно недавним дополнением, которое не было бы доступно в древней версии bash, найденной на macos ). Установив разделитель d
на нулевой байт (, выраженный здесь как пустая строка ), мы избегаем этого. -n1
означает чтение одного символа (, снова сделанного байтом благодаряLC_ALL=C
)из первой записи с разделителями NUL. Однако это означает, что его нельзя адаптировать к другому количеству байтов, как в случае с -rd '' -n2
, мы бы пропустили только один байт, если бы первый байт был равен 0.
В других оболочках вы можете заменить эту команду read
наdd bs=1 count=1 > /dev/null 2>&1
(изменить count
, а не bs
, чтобы пропустить более одного байта ).head -c 1 > /dev/null
также будет работать с некоторыми из тех head
реализаций, которые поддерживают эту не -стандартную -c
опцию, но не со всеми (и, в частности, не с FreeBSD, поэтому, вероятно, не с macos ' либо ), так как некоторые будут читать ввод фрагментами фиксированного размера, даже если запрашивается вывод меньшего количества байтов. Однако обратите внимание, что, в отличие от read
выше, они не сообщают о статусе завершения с ошибкой, когда им не удается прочитать этот один байт, поэтому shasum
будет запущен в любом случае.
Когда контрольная сумма представляет собой обычный файл, а не канал, вы можете пропускать более эффективно (предполагая, что нужно пропустить более одного байта )путем поиска внутри файла, а не читать и отбрасывать часть для пропуска с (по-прежнему zsh
синтаксисом):
zmodload zsh/system
{ sysseek 1234567 && shasum -a 256; } < some-big-file
Чтобы пропустить первые 1234567 байт.
Или с кш93:
shasum -a 256 < some-big-file <#((1234567))
С другими оболочками и с некоторыми реализациямиdd
(про macos не могу сказать ), можно:
{ dd bs=1 skip=1234567 count=0 2> /dev/null; shasum -a 256; } < some-big-file
Однако использование count=0
не является переносимым. Не все реализации dd
будут выполнять lseek()
здесь, когда счетчик равен 0. Некоторые даже понимают это как count=infinity
.