Назад | Перейти на главную страницу

Свежая конфигурация Ubuntu 16.04 Nginx обслуживает старые статические файлы

У меня очень простая целевая страница для моего домена. Последние пару дней я боролся с очень своеобразной проблемой.

Например, каталог содержит:

vanilla>
    ./files/
    ./index.html
    ./main_style.css

    files>
        ./back.gif
        ./back1.gif
        ./logo.png

Содержимое index.html:

<!DOCTYPE html>
<html>

    <head>
        <title>Vanilla</title>
        <link rel="stylesheet" type="text/css" href="main_style.css"/>
    </head>

<body>

    <div>
        <img class="logo" src="files/logo.png" />
    </div>

</body>
</html>

Содержимое main_style.css:

html {
    background-image: url("files/back1.gif");
    background-repeat: repeat;
}

img.logo {
    width: 471px;
    height: 384px;
    position: absolute;
    top: 50%;
    left:  50%;
    margin-left: -235px;
    margin-top: -192px;
}

Проблема, с которой я столкнулся, заключается в следующем:

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

Однако, помимо этого, если я внесу изменение, например, в main_style.css, это никак не отразится. Даже открытие main_style.css в моем браузере не отражает изменений и показывает старую версию файла.

Также совсем недавно я переименовал фотографию из test.png в logo.png и соответствующим образом изменил ее в index.html. Файл index.html отражает соответствующее изменение, однако он не видит фотографию «logo.png» и возвращает ошибку 404 ... Очевидно, он находится в корневом веб-каталоге, но не обслуживается. Несмотря на это, я все еще могу получить доступ к СТАРЫМ фотографиям "test.png" через URL-адрес, даже если такого файла нет на сервере.

Что я пробовал:

Я понимаю, что эта проблема определенно связана каким-то образом с кешированием, и я пробовал много решений в Интернете в своем поиске, и ни одно, похоже, не оказало никакого влияния на мою систему.

Я также вижу, что во многих случаях эта ситуация может быть вызвана VirtualBox или чем-то под названием Vagrant VM. На моей машине никогда не работала ни одна из этих вещей, а мой сервер работает на физическом ПК под моим столом.

Я подумал, что проблема могла быть вызвана тем, что я запустил более 100 обновлений, поскольку я давно не запускал свой сервер, поэтому я зашел так далеко, что сделал резервную копию моих личных данных и веб-данных с сервера и переустановил операционная система до последней версии и переустановите программное обеспечение оттуда.

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

Единственное, что я установил на машине после новой переустановки операционной системы:

Я читал, что это можно решить, установив Отправить файл в файле nginx.conf в выключен, но это ничего не решило.

Мои файлы nginx.conf и php.ini используются по умолчанию.

nginx.conf:

user www-data;
worker_processes auto;
pid /run/nginx.pid;

events {
    worker_connections 768;
    # multi_accept on;
}

http {

    ##
    # Basic Settings
    ##

    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;
    # server_tokens off;

    # server_names_hash_bucket_size 64;
    # server_name_in_redirect off;

    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    ##
    # SSL Settings
    ##

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
    ssl_prefer_server_ciphers on;

    ##
    # Logging Settings
    ##

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    ##
    # Gzip Settings
    ##

    gzip on;
    gzip_disable "msie6";

    # gzip_vary on;
    # gzip_proxied any;
    # gzip_comp_level 6;
    # gzip_buffers 16 8k;
    # gzip_http_version 1.1;
    # gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

    ##
    # Virtual Host Configs
    ##

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

Конфигурация сайта:

server {
        listen 80;
        root /usr/share/nginx/vanilla/;
        index index.html index.php index.htm;
        server_name www.website.com website.com;
        keepalive_timeout 10000;
        client_max_body_size 1024M;

        location / {
                try_files $uri $uri/ =404;
                #try_files $uri $uri/ /index.php?$args;
        }


        location ~ \.php$ {
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/run/php/php7.0-fpm.sock;
        }

}

В данной ситуации это действительно было связано с кешированием. Просто не на стороне сервера или моего браузера.

Кеширование, которое вызывало проблемы, было на стороне Cloudflare. Я использую эту службу, поскольку размещаю в своей домашней сети и хочу скрыть свой IP-адрес.

Как ни странно, я никогда раньше не сталкивался с этой проблемой с Cloudflare. Может, что-то изменилось с тех пор, как я в последний раз его использовал.

Как я это исправил:

Я настраиваю правила страницы, чтобы полностью прекратить кеширование в следующих конфигурациях:

  • * .website.com / *
  • website.com/*

А затем полностью стер сохраненный кеш Cloudflare, и теперь у меня больше нет проблем с кешированием или обслуживанием старых файлов.