Nginx 的 internal 指令可以用來限制 Web 公共目錄下的圖片等資源文件被任意用戶直接訪問。一個明顯的使用場景是,對於用戶上傳的認證圖片,屬於個人隱私資源,不應該讓所有用戶都能訪問得到,通常只能由管理員審核時查看。
假定需要限制訪問的圖片的 URL 路徑是 /images/auth-pictures/,Nginx 進行如下配置:
location ^~ /images/auth-pictures/ { internal; }
重啟 Nginx,直接訪問 /images/auth-pictures/ 下的圖片,會返回 404:
利用 PHP 在響應頭加上 “X-Accel-Redirect” 域使請求重定向到真實的圖片路徑上面:
1 <?php 2 // 可以先進行身份判斷有無訪問權限 3 // ... 4 $name = $_GET['name']; 5 header('Content-Type: ' . getimagesize('./images/auth-pictures/' . $name)['mime']); 6 header('X-Accel-Redirect: /images/auth-pictures/' . $name); 7 die;
此時就可以通過 PHP 程序來重定向請求訪問圖片了: