我的域有一个非常基本的登录页面。在过去的几天里,我一直在与一个非常特殊的问题作斗争。
例如,该目录包含:
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 错误……它显然在 web 根目录中,但没有提供。即便如此,我仍然可以通过 URL 访问旧照片“test.png”,即使服务器上不存在这样的文件。
我试过的:
我知道这个问题在某种程度上肯定与缓存有关,并且我在搜索中尝试了许多网络上的解决方案,但似乎都没有对我的系统产生任何影响。
我还看到,在许多情况下,这种情况可能是由 VirtualBox 或称为 Vagrant VM 的东西引起的。我的机器从来没有运行过这些东西,而我的服务器正在我办公桌下的物理 PC 上运行。
我认为这个问题可能是由于我运行了 100 多个更新引起的,因为我有一段时间没有运行我的服务器,所以我竟然从服务器备份了我的个人数据和 Web 数据并重新安装了操作系统到最新版本,然后从那里重新安装软件。
我刚刚完成,并重新配置了所有的网络软件,但可以肯定的是,它仍然有同样的问题。
重新安装操作系统后,我在机器上安装的唯一东西是:
- openssh 服务器
- 桑巴
- nginx
- mysql服务器
- php-fpm
- php-mysql
我读过这可以通过将nginx.conf 文件中的sendfile设置为off来解决,但这并没有解决任何问题。
我的 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 的这个问题。自从我上次使用它以来,可能发生了一些变化。
我如何修复它:
我设置页面规则以在以下配置上完全停止缓存:
然后完全擦除 Cloudflare 的存储缓存,现在我不再遇到缓存或旧文件服务的问题。