Как очистить кэш браузера клиента и отразить новые изменения каждый раз, когда клиент открывает веб-сайт с NGINX?

Вопрос или проблема

Я запускаю сборку Direct React на сервере NGINX в GCP VM. Проблема, с которой я сталкиваюсь снова и снова, заключается в том, что ранее я открывал сайт как example.com, и когда я добавил постоянное перенаправление с конфигурационными файлами NGINX на www.example.com, он воспринимается браузером как новый сайт, в то время как ранее открывался example.com. В приватной вкладке сайт перенаправляется на www.example.com. А в некоторых браузерах обычная вкладка с www.example.com создает кеш, и новые изменения не отражаются.

Вот мой конфигурационный файл:

server {
    listen 80;
    server_name example.com www.example.com;

    # Перенаправить HTTP на HTTPS
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name example.com;

    ssl_certificate /etc/letsencrypt/live/www.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/www.example.com/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    return 301 https://www.example.com$request_uri;
}

server {
    listen 443 ssl;
    server_name www.example.com;

    ssl_certificate /etc/letsencrypt/live/www.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/www.example.com/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    root /var/www/html;  # Путь к вашей папке сборки React
    index index.html;

    location / {
        try_files $uri /index.html;  # Перенаправить все маршруты, не соответствующие, на index.html
    }

    # Обычно обслуживать статические файлы
    location ~* \.(?:ico|css|js|gif|jpe?g|png|woff2?|eot|ttf|otf|svg)$ {
        expires 6M;
        access_log off;
        add_header Cache-Control "public";
    }

    # Запретить доступ к скрытым файлам
    location ~ /\. {
        deny all;
    }
}

Я просто хочу, чтобы сайт, который работает как example.com, перенаправлялся на www.example.com и каждый раз, когда клиент посещает сайт, он должен показывать последние изменения.

Пожалуйста, помогите.

Ответ или решение

Чтобы обеспечить правильное кэширование веб-сайта и избежать проблем с обновлениями при использовании NGINX в вашей ситуации с React, вам потребуется внести изменения в структуру конфигурации NGINX и настроить кэширование браузера. Давайте разберем необходимые шаги по порядку.

1. Перенаправление трафика с example.com на www.example.com

Ваш текущий конфигурационный файл уже содержит правила для перенаправления. Убедитесь, что перенаправления настроены корректно. Вы уже сделали это с помощью правил, возвращающих код 301 (постоянное перенаправление). Это правильный подход, и рекомендуется оставить его без изменений:

server {
    listen 80;
    server_name example.com www.example.com;

    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name example.com;

    ssl_certificate /etc/letsencrypt/live/www.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/www.example.com/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    return 301 https://www.example.com$request_uri;
}

2. Настройка кэширования для статических файлов

В вашем секции, которая отвечает за статические файлы, необходимо внести изменения для более гибкого управления кэшированием. Кэш браузера может сохранять старые версии файлов, поэтому вы можете использовать версионирование (добавление хешей к именам файлов) в ваших статических ресурсах.

Вместо этого, чтобы обеспечить новое извлечение ресурсов, можно настроить заголовки кэширования следующим образом:

location ~* \.(?:css|js|gif|jpe?g|png|woff2?|eot|ttf|otf|svg)$ {
    expires 1h;  # Установите время кэширования на 1 час
    access_log off;
    add_header Cache-Control "public, max-age=3600";
    add_header X-Content-Type-Options nosniff;
}

3. Добавление мета-тегов для контроля кэширования

В вашем React-приложении вы также можете добавить мета-теги в index.html, чтобы гарантировать, что браузеры часто проверяют наличие обновлений:

<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="0" />

Эти мета-теги помогут сигнализировать браузерам, что нужно каждый раз проверять наличие обновлений на сервере.

4. Использование версионирования для файлов

Для обеспечения оперативного получения обновлений, используйте подход с версионированием. Например, если ваши CSS и JS файлы называются main.css и main.js, вы можете переименовать их в main.v1.css и main.v1.js при каждом обновлении. Это позволит избежать кэширования предыдущих версий.

5. Проверка и тестирование

После внедрения вышеуказанных изменений убедитесь в их корректности, запустив браузер в режиме инкогнито и проверяя, обновляются ли изменения на сайте. Также можно воспользоваться инструментами разработчика в браузере (вкладка Network), чтобы видеть, какие файлы загружаются, и проверить заголовки кэширования.

Следующие шаги должны помочь вам решить вопросы с кэшированием и обеспечением актуальности вашего веб-сайта, выполненного на React и размещенного на сервере NGINX.

Оцените материал
Добавить комментарий

Капча загружается...