全新的 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 錯誤……它顯然在 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 的這個問題。自從我上次使用它以來,可能發生了一些變化。
我如何修復它:
我設置頁面規則以在以下配置上完全停止記憶體:
- .website.com/
- website.com/*
然後完全擦除 Cloudflare 的儲存記憶體,現在我不再遇到記憶體或舊文件服務的問題。