Nginx

全新的 Ubuntu 16.04 Nginx 配置服務於舊的靜態文件

  • February 24, 2017

我的域有一個非常基本的登錄頁面。在過去的幾天裡,我一直在與一個非常特殊的問題作鬥爭。

例如,該目錄包含:

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 的儲存記憶體,現在我不再遇到記憶體或舊文件服務的問題。

引用自:https://serverfault.com/questions/834602