通過lua來配置實現(xiàn)Nginx服務(wù)器的防盜鏈功能
下載服務(wù)器時常被人盜鏈,時間久了導(dǎo)致服務(wù)器大量資源浪費,由于服務(wù)器使用nginx做為web服務(wù)器。nginx的防盜鏈方法有很多,可以使用現(xiàn)成的防盜鏈模塊nginx-accesskey-2.0.3,編譯ningx時添加此模塊即可。
由于服務(wù)其他業(yè)務(wù)需要,所以nginx編譯了lua模塊,所以就想通過lua來實現(xiàn)下載服務(wù)器的防盜鏈功能(通過lua的Nginx模塊lua_nginx_module、這里不再詳細介紹配置過程),這樣就可以免去了accesskey模塊。原理就是生成經(jīng)過處理過的下載鏈接,然后下載服務(wù)器在處理這個下載鏈接,成功則下載,失敗則阻止。下面就是詳細的配置實例:
一、在下載頁面生成鏈接的nginx配置
download.jb51.net的配置:
server
{
listen 80;
server_name download.jb51.net;
index index.htm index.html;
root /data/www/download;
ssi on;
location /
{
set_by_lua $downkey '
return ngx.md5("encryption" .. ngx.var.remote_addr .. "suffix")
';
}
}
注意:要開啟ssi才能在html頁面中獲取nginx自定義變量downkey,這樣才能生成經(jīng)過處理的url,其中字符串encryption和suffix為自定義的,可隨便改其他字符,目的是為了生成別人不容易猜解的串。
測試index.html代碼:
二、下載服務(wù)器nginx配置:
server
{
listen 80;
server_name down.jb51.net;
index index.htm index.html;
root /data/www/down;
limit_conn one 1;
set $limit_rate 1000k;
location /
{
set_by_lua $foo '
if string.sub(ngx.var.uri, 2, 33) == ngx.md5("encryption" .. ngx.var.remote_addr .. "suffix") then
return 1
else
return 0
end
';
if ($foo = 1)
{
rewrite "^/([0-9a-z]{32})(.*?)$" $2 break;
}
if ($foo = 0)
{
rewrite ^/ http://download.jb51.net/404.htm redirect;
}
}
}
這樣把鏈接復(fù)制給另外一臺機器后,就會打開提示錯誤頁面。
相關(guān)文章
Nginx端口被占用的解決方案(systemctl restart nginx失敗)
ginx (engine x) 是一個高性能的HTTP和反向代理服務(wù)器,也是一個IMAP/POP3/SMTP服務(wù)器,它也是一種輕量級的Web服務(wù)器,可以作為獨立的服務(wù)器部署網(wǎng)站(類似Tomcat),本文給大家介紹了NGINX啟動報錯,端口被占用解決方案,需要的朋友可以參考下2024-10-10
nginx中proxy_set_header參數(shù)的實現(xiàn)
本文詳細介紹了Nginx中proxy_set_header指令的用法,通過設(shè)置不同的請求頭信息,可以實現(xiàn)更靈活的反向代理功能,具有一定的參考價值,感興趣的可以了解一下2024-12-12
Nginx?CertBot配置HTTPS泛域名證書Debian及常見問題
這篇文章主要介紹了Nginx?CertBot配置HTTPS泛域名證書Debian及常見問題解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-11-11
使用Nginx實現(xiàn)301跳轉(zhuǎn)至https的根域名示例代碼
這篇文章主要介紹了使用Nginx實現(xiàn)301跳轉(zhuǎn)至https的根域名,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04

