Nginx

位置指令不起作用

  • September 25, 2016

對於我的 NGINX 伺服器,我設置了一個虛擬伺服器來輸出靜態內容。目前我正在嘗試設置它,以便圖像具有到期日期。但是,當我為此創建位置指令時,一切都只會導致 404。

我現在的配置是這樣的:

/srv/www/static.conf

server {
   listen                          80;
   server_name                     static.*.*;

   location / {
           root                    /srv/www/static;
           deny                    all;
   }

   location /images {
           expires                 1y;
           log_not_found           off;
           root                    /srv/www/static/images;
   }
}

請注意,此文件包含在 /etc/nginx/nginx.conf 中,位於 http 指令中

我正在嘗試訪問圖像,比如說static.example.com/images/screenshots/something.png…。果然,圖像也存在於/srv/www/static/images/screenshots/something.png。但是,去所說的地址不起作用,只是告訴我404 Not Found

但是,如果我刪除location /images並更改location /為以下內容……

location / {
   root /srv/www/static;
}

有用!我在這裡做錯了什麼?

您的配置遵循 nginx 配置陷阱您應該在配置 nginx 之前閱讀它。

要回答您的問題,您不應root在位置中定義,定義一次,位置標籤將自動讓您分配對特定目錄的訪問權限。

此外,不要為圖像目錄定義自定義根目錄,而是使用try_files. 將$uri映射/images/目錄與/static/images/.

試試這個配置:

server {
   listen                          80;
   server_name                     static.*.*;
   root                            /srv/www;

   location /static/ {
           deny                    all;
   }

   location /images/ {
           expires                 1y;
           log_not_found           off;
           autoindex               off;
           try_files $uri static/images$uri;
   }
}

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