Nginx權(quán)限控制文件的預(yù)覽和下載方式
基于 Nginx + Java(SpringBoot) 實現(xiàn)帶權(quán)限驗證的靜態(tài)文件服務(wù)器,支持文件下載、PDF預(yù)覽和圖片預(yù)覽。
需要注意的是,無需權(quán)限判斷的圖片不建議使用此方法,大量的圖片訪問會增加后臺服務(wù)器的處理壓力。
實現(xiàn)原理
本質(zhì)上是使用了X-Sendfile功能來實現(xiàn),X-Sendfile 是一種將文件下載請求重定向到Web 服務(wù)器處理的機制,該Web服務(wù)器只需負責(zé)處理請求(例如權(quán)限驗證),而無需執(zhí)行讀取文件并發(fā)送給用戶的任務(wù)。
X-Sendfile可顯著提高后臺服務(wù)器的性能,消除了后端程序既要讀文件又要處理發(fā)送的壓力,尤其是處理大文件下載的情形下!
Nginx也具有此功能,但實現(xiàn)方式略有不同。
在Nginx中,此功能稱為X-Accel-Redirect。
用戶請求文件,權(quán)限控制時序圖

實現(xiàn)步驟
1、靜態(tài)文件通過file_server訪問,會被設(shè)置為internal,即只能內(nèi)部訪問不允許外部直接訪問。
# 文件下載服務(wù)
location ^~ /file_server {
# 內(nèi)部請求(即一次請求的Nginx內(nèi)部請求),禁止外部訪問,重要。
internal;
# 文件路徑
alias /home/file/;
limit_rate 200k;
# 瀏覽器訪問返回200,然后轉(zhuǎn)由后臺處理
error_page 404 =200 @backend;
}2、所有靜態(tài)資源請求均被重定向到Java后臺,經(jīng)過權(quán)限驗證后才能訪問。
# 文件下載鑒權(quán)
location @backend {
# 去掉訪問路徑中的 /file_server/,然后定義新的請求地址。
rewrite ^/file_server/(.*)$ /uecom/attach/$1 break;
# 這里的url后面不可以再拼接地址
# 定義后臺鑒權(quán)服務(wù)
proxy_pass http://192.168.1.101:9999;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}JAVA SpringBoot 后臺權(quán)限驗證
用戶請求只需要傳遞附件參數(shù)和身份token,不再需要傳遞服務(wù)器的真實路徑。
例如:
http://127.0.0.1:9222/file_server/img_file?id=123456&token=**********
權(quán)限校驗完成,返回設(shè)置文件請求路徑
response.setHeader("X-Accel-Redirect", "/file_server" + attach.getAttachPath());重點是X-Accel-Redirect配置返回服務(wù)器文件的真實路徑,該路徑返回后由Nginx內(nèi)部請求處理,不會暴露給請求用戶。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Nginx使用mirror指令實現(xiàn)接口復(fù)制
Nginx中使用mirro指令可以方便地實現(xiàn)接口請求的復(fù)制,這個功能非常適合用于流量監(jiān)控、數(shù)據(jù)收集或負載均衡,下面我們就來看看具體的用法吧2024-10-10
Nginx正則表達式相關(guān)的參數(shù)和規(guī)則介紹
這篇文章主要給大家介紹了關(guān)于Nginx正則表達式相關(guān)的參數(shù)和規(guī)則的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用Nginx正則表達式具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05
基于Xen的VPS ubuntu+nginx+php安裝教程
跟蹤vps已經(jīng)很久了,但是因為需要特殊端口開服務(wù),所以符合條件的多為Xen平臺的vps。眾多比較之后選擇了vpslink在西雅圖機房,速度還不錯。2010-07-07
nginx代理參數(shù)proxy_pass的實現(xiàn)
proxy_pass參數(shù)用于配置反向代理,本文主要介紹了nginx代理參數(shù)proxy_pass的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-04-04
Nginx geoip模塊實現(xiàn)地區(qū)性負載均衡
相信做過awstats的都用過開源的geoip.dat ip數(shù)據(jù)庫,剛好nginx wiki上有g(shù)eoip 模塊,這樣就可以實現(xiàn)地區(qū)性的負載均衡,但是maxmind 的ip數(shù)據(jù)庫對中國的支持不算太好,不過現(xiàn)在也不錯了~2010-12-12

