opened image

Микрокештеу nginx+apache және конфигурацияның нюанстары

Бұл мақалада біз микрокештеуді талқылаймыз: оның не үшін қажет, қалай баптау керек және қандай қиындықтар кездесуі мүмкін.

 

 

Микрокештеу дегеніміз не?

 

Микрокештеу — бұл бет файлдарын толықтай жасайтын кэш түрі, ол бэкенд-серверге сұрау жасаудың орнына дайын бетті береді.

Мұндай кэштеудің негізгі кемшілігі, әрине, беттердің өте сирек жаңартылуы. Бірақ мұндай кэштеудің артықшылықтары қандай?

Келіңіздер, әлсіз сервер мен жеткілікті жылдам сайт жағдайын алайық, бірақ оған боттардан көп сұрау түседі. Олар бэкендті де, деректер базасын да жүктейді, бұл сайттың өнімділігінің төмендеуіне және оның баяу жүктелуіне әкеледі. Мұнда микрокештеу көмекке келеді: біз дайын беттерді ұсынамыз, бэкендті де, деректер базасын да жүктемей. Сондай-ақ, микрокештеу беттерді бірнеше есе жылдам жүктеуге мүмкіндік береді, өйткені әр сұрау үшін бэкендтен жауап күту қажет емес.

Мұндай кэш динамикалық сайттар мен әкімші панелінің беттері үшін жарамсыз, бірақ егер сізде, мысалы, күніне бір рет жаңартылатын бет болса, бұл тамаша нұсқа.

Енді микрокештеуді баптауға көшуге болады.

 

Микрокештеуді баптау

 

Ол үшін бізге кэшімізді сақтайтын директория қажет.

Бұл мақалада дисктегі орын ретінде ОЗУ-ның бір бөлігін пайдаланамыз, өйткені бұл файлдарды дискте сақтауынан тиімдірек.

Алдымен, біздің кэшімізді сақтайтын директорияны жасаймыз, біздің жағдайда /home/cache:

 

 

mkdir /home/cache

 

 

1 ГБ ОЗУ-ны файлдар үшін орын ретінде монтируемыз:

 

 

mount -t tmpfs -o size=1G tmpfs  /home/cache

 

Сондай-ақ, серверді әр іске қосқанда бұл кеңістікті монтирлеуді қосамыз (бұл жолды /etc/fstab файлына қосу керек):

 

 

tmpfs /home/cache tmpfs rw,size=1G 0 0

 

Директория үшін қауіпсіз құқықтарды да орнатамыз:

 
chown www-data:www-data -R /home/cache
chmod 700 /home/cache

Микрокеширование nginx+apache и нюансы конфигурации - 2

 

Дайын, біз кэш үшін орын дайындадық. Бұл шешімнің артықшылығы - серверді қайта іске қосқанда барлық кэш тазаланады.

Енді кэшпен жұмыс істеуге кедергі келтіретін ықтимал қиындықтарға назар аударамыз, және кэш файлдары жасалса да, ол жұмыс істемейтін себептер. Алдымен, PHP параметрін session.cache_limiter public етіп баптау керек, әйтпесе сайттың заголовкасында Pragma: no-cache көрсетіледі, бұл кэшті дұрыс пайдалануға және жасауға мүмкіндік бермейді.

 

Микрокеширование nginx+apache и нюансы конфигурации - 3

Екінші қиындық — сайттың .htaccess файлына жол қосу керек. Кэш ескірмеуі үшін max-age параметрін басқа кэштермен бірдей орнатуды ұсынамын:

 

 
Header set Cache-Control "max-age=300, public"

Микрокеширование nginx+apache и нюансы конфигурации - 4

 

Енді біз кэшті пайдалануға кедергі келтірмейтіндігіне сенімді бола аламыз. Ең маңыздысын соңына қалдырамын, яғни Nginx-ті баптау.

Файлда /etc/nginx/nginx.conf http бөлімінде келесі жолдарды қосу керек:

 

 
proxy_cache_path /home/cache levels=1:2 keys_zone=global_cache:100m max_size=1g inactive=5m;
proxy_cache_valid any 5m;
proxy_cache_valid 200 5m;
proxy_cache_valid 404 15s;
proxy_cache_use_stale error timeout invalid_header updating http_500 http_503;
proxy_cache_lock on;

Микрокеширование nginx+apache и нюансы конфигурации - 5

 

Сайттың конфигурация файлына location / блогына келесі жолдарды қосу керек: 

 

location / {
proxy_cache global_cache;
add_header X-Cache-Status $upstream_cache_status;
proxy_cache_key $host$request_uri;
proxy_ignore_headers "Set-Cookie";
proxy_pass http://backend;
}

Микрокеширование nginx+apache и нюансы конфигурации - 6

 

ISPManager үшін бұл жолдарды location @fallback блогына қосу керек, өйткені барлық бэкендке сұраулар осы блок арқылы өтеді.

Енді конфигурацияда қосқан әр жолдың не үшін жауап беретінін түсіндіремін:

  • proxy_cache_path /home/cache levels=1:2 keys_zone=global_cache:100m max_size=1g inactive=5m;

    • proxy_cache_path — кэш сақталатын жол.
    • levels=1:2 — 3 деңгейден артық тереңдік пайдалануға болмайды (мысалы, 1:2:3). Сандар кэш директорияларының атауындағы символдар санын білдіреді, бұл баяу дисктерде жылдам жұмыс істеу үшін қажет. Егер тек levels=1 пайдаланылса, баяу дисктерде кэшдің пайдасы аз болады, себебі көп файлдар жасалады. Дайын баптауды пайдалануды ұсынамын.
    • keys_zone=global_cache:100m — біздің сайттарымыздың жүгінетін аймағының атауы. Егер кэш global_cache аймағына бапталса, ол файлдарды /home/cache директориясынан іздейді. 100m — кэш үшін атаулар аймағының өлшемі.
    • max_size=1g — кэшдің жалпы өлшемі.
    • inactive=5m — кэш белсенді болып саналатын уақыт. Егер осы уақыт ішінде кэшге жүгінбесе, жүйе оны белсенді емес деп санап, жоюы мүмкін.
  • proxy_cache_valid any 5m; — кэшдің сақталатын уақыты. any барлық HTTP кодтары, арнайы көрсетілгендерден басқа, 5 минут бойы сақталады дегенді білдіреді.

  • proxy_cache_use_stale error timeout invalid_header updating http_500 http_503; — көрсетілген қателер кезінде ескірген кэшді пайдалануға мүмкіндік береді.

  • proxy_cache_lock on; — бірнеше сұраудан бірдей кэш жасауға мүмкіндік бермейді.

  • proxy_cache global_cache; — сайттың пайдаланатын кэш аймағын көрсетеді.

  • proxy_cache_key $host$request_uri; — кэш статусын тексеру. Егер заголовкта X-Cache-Status: HIT болса, бәрі дұрыс бапталған. Егер MISS болса, себептерді іздеу керек.

  • proxy_ignore_headers "Set-Cookie"; — кэш жасауға мүмкіндік береді, кукилерді елемей. Мұнысыз кэш HIT көрсетпейді, себебі әр сұрау бірегей болады.

  • proxy_pass http://backend; — мұнда бэкенд-сервердің IP және портын көрсету керек (мысалы, localhost:8080, егер Apache2 бэкенд-сервер ретінде пайдаланылса).

Кэш статусын тексеру үшін команданы пайдалануға болады:

 
curl -I http://Сіздің_сайтыңыз

​​​​​​​Микрокеширование nginx+apache и нюансы конфигурации - 7

 

Жауапта X-Cache-Status: HIT (немесе MISS, BYPASS) заголовы болады. HIT-тан басқа барлық нәрсе — бұл қате.

Дайын. Біз сайтта микрокештеуді баптадық.

*Сайт articlesite.com мақала үшін арнайы жасалған.

 

Сондай-ақ, басқа пайдалы мақалаларды қарауды ұсынамыз: