Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Принцип действия:
- гостям данные отдаются из кеша (обновляются согласно настройкам кеширования - proxy_cache_valid)
- авторизованным пользователям данные всегда отдаются напрямую, кроме случая когда:
- бекэнд сервер выдает ошибку определенную в proxy_cache_use_stale
- если бекэнд не работает или выдает ошибку определенную в proxy_cache_use_stale гостю выдается ответ из кеша не зависимо от его устаревания
- определение зарегистрированного пользователя осуществляется по наличию определенной куки (её название зависит от движка сайта)
- В конфиге nginx в секции http {…} добавляем строчку определения кеша:
- ## Создаем кеш зону pagecache (память под ключи в 15Мб) с настройками:
- # inactive: xранить кеш 60 минут
- # max_size: максимальный размер кеш данные 500Мб
- proxy_cache_path /var/cache/nginx levels=2 keys_zone=pagecache:15m inactive=60m max_size=500m;
- В секции server {…}:
- server {
- listen *:80;
- server_name site.name;
- # ключ по которому сохраняются и берутся данные из кеша
- proxy_cache_key "$request_method|$http_if_modified_since|$http_if_none_match|$host|$request_uri";
- # Указывает в каких случаях клиенту можно отдать несвежий ответ из кеша
- proxy_cache_use_stale error timeout invalid_header http_500 http_502 http_503 http_504;
- location / {
- # оригинальный url (нужен для кеширования)
- set $o_uri $request_uri;
- # Определение пользователя по куке LOGIN (замените на свою)
- if ( $cookie_LOGIN = "" ) {
- # если кука LOGIN не установлена обрабатывать запрос через кеш
- rewrite ^ /ng_cache last;
- }
- # Для авторизованных отдать данные напрямую
- proxy_cache pagecache;
- proxy_cache_valid any 0;
- proxy_pass http://10.0.1.26;
- proxy_set_header Host $host;
- proxy_set_header X-Real-IP $remote_addr;
- }
- # !Важно! url по которому осуществляется авторизвация
- # и устанавливается определяющая кука (LOGIN)
- location /login {
- proxy_pass http://10.0.1.26;
- proxy_set_header Host $host;
- proxy_set_header X-Real-IP $remote_addr;
- }
- # Учтите что кешируется весь ответ от беэнда, если хотите исключить некоторые файла, то
- # добавте эту настройку. Исключаем картинки, видео, музыку, архивы:
- location ~* \.(jpe?g|gif|png|tif|svg|mp3|ogg|avi|mpe?g|zip|gz|bz2?|rar|ico|bmp|swf|txt|xml)$ {
- proxy_pass http://10.0.1.26;
- proxy_set_header Host $host;
- proxy_set_header X-Real-IP $remote_addr;
- }
- # Обработка через кеш
- location /ng_cache {
- internal;
- # активировать зону кеширования pagecache
- proxy_cache pagecache;
- # Кешировать указанные коды ответов 10 минут
- proxy_cache_valid 200 301 302 304 10m;
- # Защита от раздачи одинаковой куки в кешированном ответе
- proxy_hide_header "Set-Cookie";
- # Игнорировать параметры кеша заданные бекэндом
- proxy_ignore_headers "Cache-Control" "Expires";
- # Получение данных от бекэнда по оригинальному url
- proxy_pass http://10.0.1.26:80$o_uri;
- proxy_set_header Host $host;
- proxy_set_header X-Real-IP $remote_addr;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement