Skip to content

Instantly share code, notes, and snippets.

@aktaumag
Created March 13, 2021 21:00
Show Gist options
  • Save aktaumag/4e036bff9cd32a74dc267800091e2c65 to your computer and use it in GitHub Desktop.
Save aktaumag/4e036bff9cd32a74dc267800091e2c65 to your computer and use it in GitHub Desktop.
Обеспечение корректной обработки If-Modified-Since имеет чрезвычайно важную роль, если мы боремся за органический трафик.
@aktaumag
Copy link
Author

aktaumag commented Jan 21, 2022

Если это хостинг nic.ru (RU-CENTER), то техподдержка не помогает даже для статических файлов, но можно перевести сервер в ручной режим управления и самому настроить конфигурацию Nginx.
Инструкция — https://www.nic.ru/help/nastrojka-sajta-kodirovka-perenapravlenie-logi-i-dr_6760.html#p6

Ищем в файле код:

 # Static files location
    location ~* ^.+\.(jpg|jpeg|gif|swf|png|ico|mp3|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|avi|ppt|txt|tar|mid|midi|wav|bmp|rtf|wmv|mpeg|mpg|mp4|m4a|spx|ogx|ogv|oga|webm|weba|ogg|tbz|js|7z|woff|svg|iso)$ {
        root   /home/login/domen.com/docs;
        access_log  /var/log/domen.com.access_log  combined;
        error_page 404 = @fallback;
        log_not_found off;
        accel_htaccess_switch on;
    }

Добавляем в список локации woff2 и прочие недостающие форматы
И добавляем туда if_modified_since before; и заодно expires 365d; для кеша в браузере.
Нужно чтоб получилось так:

 # Static files location
    location ~* ^.+\.(jpg|jpeg|gif|swf|png|avif|webp|ico|mp3|css|zip|tgz|gz|rar|bz2|doc|docx|xls|xlsx|exe|pdf|avi|ppt|txt|tar|mid|midi|wav|bmp|rtf|wmv|mpeg|mpg|mp4|m4a|spx|ogx|ogv|oga|webm|weba|ogg|tbz|js|7z|woff|woff2|ttf|svg|iso)$ {
        root   /home/login/domen.com/docs;
        access_log  /var/log/domen.com.access_log  combined;
        error_page 404 = @fallback;
        log_not_found off;
        accel_htaccess_switch on;
        if_modified_since before;
        expires 365d;
    }

Пример пути к файлу настроек:
/etc/nginx/vhosts/sites-enabled/site.ru.site.conf
/home/login/etc/nginx/site.ru.conf
/home/login/etc/nginx/sites-enabled/site.ru.site.conf

После внесения изменений в конфигурационные файлы Nginx достаточно перезапустить только Nginx, а не весь сервер.
Команда:
systemctl restart nginx

@aktaumag
Copy link
Author

Плагин для добавления заголовков к постам Wordpress: https://wordpress.org/plugins/last-modified-and-if-modified-since-headers/

@aktaumag
Copy link
Author

aktaumag commented May 16, 2023

Заметка

Чтобы в PHP получить заголовок запроса
в .htaccess прописываем правило

<IfModule mod_rewrite.c>
RewriteEngine On

RewriteRule .* - [E=HTTP_IF_MODIFIED_SINCE:%{HTTP:If-Modified-Since}]
RewriteRule .* - [E=HTTP_IF_NONE_MATCH:%{HTTP:If-None-Match}]
</IfModule>

А потом уже в самом PHP получаем значения переданные в запросе и возвращаем либо сайт, либо 304 ответ
$_SERVER['HTTP_IF_MODIFIED_SINCE'] и $_SERVER['HTTP_IF_NONE_MATCH']

Примерный пример (чужой код)

function caching_headers ($file, $timestamp) {
    $gmt_mtime = gmdate('r', $timestamp);
    header('ETag: "'.md5($timestamp.$file).'"');
    header('Last-Modified: '.$gmt_mtime);
    header('Cache-Control: public');

    if(isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) || isset($_SERVER['HTTP_IF_NONE_MATCH'])) {
        if ($_SERVER['HTTP_IF_MODIFIED_SINCE'] == $gmt_mtime || str_replace('"', '', stripslashes($_SERVER['HTTP_IF_NONE_MATCH'])) == md5($timestamp.$file)) {
            header('HTTP/1.1 304 Not Modified');
            exit();
        }
    }
}

caching_headers ($_SERVER['SCRIPT_FILENAME'], filemtime($_SERVER['SCRIPT_FILENAME']));

@aktaumag
Copy link
Author

aktaumag commented Jul 10, 2023

Письмо хостеру или сисадмину (переделанное).

Добрый день!
Домен: (указать домен)

Проверяю логотип: (ссылка на логотип)
На этом ресурсе: https://last-modified.com/ru/if-modified-since.html
Получаем ошибку: (скриншот)

Для исправления ситуации в конфигурации Nginx нужно прописать настройку: if_modified_since before; для всех статических файлов.

Должно получиться примерно так:

    # Static files location
    location ~* ^.+\.(jpg|jpeg|gif|swf|png|avif|webp|ico|mp3|css|zip|tgz|gz|rar|bz2|doc|docx|xls|xlsx|exe|pdf|avi|ppt|txt|tar|mid|midi|wav|bmp|rtf|wmv|mpeg|mpg|mp4|m4a|spx|ogx|ogv|oga|webm|weba|ogg|tbz|js|7z|woff|woff2|ttf|svg|iso)$ {
        # ... тут могут быть ещё и другие настройки для статических файлов
        if_modified_since before;
    }

Можете ли вы это сделать?
Или можете подсказать где/как я могу самостоятельно прописать эту настройку?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment