欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用nginx+lua進(jìn)行token鑒權(quán)的方法

 更新時(shí)間:2024年10月10日 10:30:27   作者:逸丶時(shí)光  
使用nginx和lua腳本實(shí)現(xiàn)對(duì)Minio服務(wù)器圖片鏈接的token鑒權(quán),通過反向代理隱藏真實(shí)IP,增強(qiáng)安全性,介紹了整個(gè)鑒權(quán)流程,包括nginx配置和lua腳本的具體實(shí)現(xiàn),適用于需要保護(hù)圖片不被未授權(quán)訪問的場景

最近在使用minio文件服務(wù)器,來實(shí)現(xiàn)圖片上傳與展示功能,在展示的時(shí)候出現(xiàn)一個(gè)問題,就是圖片在做鑒權(quán)時(shí),minio提供的有效地址是真的拉跨,沒法實(shí)現(xiàn)圖片鏈接的有效鑒權(quán)功能,而且鏈接直接給出來的話也有風(fēng)險(xiǎn)。

后面想著加一個(gè)反向代理的方式,也就是Nginx做代理,這樣就不會(huì)暴露圖片的ip地址。但是,在做鑒權(quán)時(shí)遇到了麻煩,網(wǎng)絡(luò)上大部分推薦lua腳本來實(shí)現(xiàn)鑒權(quán)的方式,在經(jīng)過幾天的不斷試錯(cuò),才最終將他實(shí)現(xiàn),現(xiàn)在在此記錄下。

工具:openresty(nginx集成lua模塊,比較簡單)

lua包需要下載lua-resty-http工具包,地址lua-resty-http,解壓后將.lua文件放到 lualib\resty目錄下就行。

實(shí)現(xiàn)思路:用戶發(fā)送請(qǐng)求---> nginx ----->根據(jù)圖片路徑策略-----> 執(zhí)行l(wèi)ua代碼(發(fā)送http到后端token鑒權(quán))----->通過就代理到具體圖片服務(wù)器----->否則提示無權(quán)限

nginx關(guān)鍵代碼

http {
    
    # 定義全局變量
    init_by_lua_block {
		cjson = require "cjson";
		http = require "resty.http";
	}

    server {
        
        location ~^/(api)/image/(.*)$ {
			rewrite_by_lua_block {
				-- local cjson = require "cjson"
				-- local http = require "resty.http"
				local httpc = http.new()
				local ngx = ngx
				local headers = ngx.req.get_headers()
				-- get請(qǐng)求參數(shù)中T就是token
				local token = headers["token"]
				local request_method = ngx.var.request_method
				local args = nil
				if "GET" == request_method then
					args = ngx.req.get_uri_args()
				elseif "POST" == request_method then
					ngx.req.read_body()
					args = ngx.req.get_post_args()
				end
				
				token = args["token"];
				if not token then
					ngx.header['Content-Type'] = 'text/plain; charset=utf-8';
					ngx.status = ngx.HTTP_FORBIDDEN
					ngx.say("您無權(quán)限瀏覽該圖片。")
					ngx.exit(200)
				end
				-- 字符串拼接
                -- 你要實(shí)現(xiàn)token鑒權(quán)的服務(wù),header和參數(shù)都給你實(shí)現(xiàn)了,根據(jù)實(shí)際需要選擇
				local url = "http://127.0.0.1:8080/image/checkToken?token="..token;
				
				local res, err = httpc:request_uri(url, {method="GET", headers={["token"]=token}})
				
				if not res then 
					ngx.header['Content-Type'] = 'text/plain; charset=utf-8';
					ngx.say(cjson.encode({message = "Error getting response",status = ngx.HTTP_INTERNAL_SERVER_ERROR }));					
					ngx.exit(200)
				end
                if res.body == '0' then 
					ngx.header['Content-Type'] = 'text/plain; charset=utf-8';
					ngx.say("您無權(quán)限瀏覽該圖片。");					
					ngx.exit(200)
				end	
			}
			
			proxy_pass http://yourip:9000/$2;
			
		}
    }
}

Java后端代碼

@RestController
@RequestMapping("/image")
public class TokenResource {
    @RequestMapping("/checkToken")
    public String checkToken(HttpServletRequest request, String token) {
        System.out.println("程序進(jìn)來了");
        String header = request.getHeader("token");
        System.out.println("頭部token:" + header);
        if (StringUtils.isEmpty(token)) {
            System.out.println(token + ":0");
            return "0";
        }
        if ("1".equals(token)) {
            System.out.println(token + ":1");
            return "1";
        }
        return "0";
    }
}

當(dāng)token校驗(yàn)通過,就不做攔截,lua代碼執(zhí)行完會(huì)走到nginx的轉(zhuǎn)發(fā)路徑上來

?proxy_pass http://your_ip:9000/$2?

~^/(api)/image/(.*)$ 寫成 ~^/api/image/(.*)$ 時(shí) proxy_pass 改為 http://your_ip:9000/$1

 到此這篇關(guān)于使用nginx+lua進(jìn)行token鑒權(quán)的方法的文章就介紹到這了,更多相關(guān)nginx lua token鑒權(quán)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Nginx實(shí)現(xiàn)靜態(tài)資源壓縮的方法詳解

    Nginx實(shí)現(xiàn)靜態(tài)資源壓縮的方法詳解

    靜態(tài)資源過大,下載耗時(shí)導(dǎo)致頁面打開慢,希望通過壓縮減小文件大小,提升下載速度,所以本文給大家介紹了Nginx實(shí)現(xiàn)靜態(tài)資源壓縮的方法,并通過代碼示例給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2024-02-02
  • 阿里云Linux系統(tǒng)Nginx配置多個(gè)域名的方法詳解

    阿里云Linux系統(tǒng)Nginx配置多個(gè)域名的方法詳解

    本篇文章主要介紹了阿里云Linux系統(tǒng)Nginx配置多個(gè)域名的方法詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-02-02
  • Nginx出現(xiàn)403 Forbidden問題的常見原因與解決

    Nginx出現(xiàn)403 Forbidden問題的常見原因與解決

    Nginx 返回 403 Forbidden 錯(cuò)誤通常表示客戶端沒有權(quán)限訪問請(qǐng)求的資源,這種錯(cuò)誤有許多可能的原因,本文將為大家介紹一下常見的原因和對(duì)應(yīng)的解決方法,希望對(duì)大家有所幫助
    2025-03-03
  • Nginx暴露出請(qǐng)求的真實(shí)IP的問題

    Nginx暴露出請(qǐng)求的真實(shí)IP的問題

    在工作中,經(jīng)常會(huì)用用戶實(shí)際請(qǐng)求的IP地址,本文主要介紹了Nginx暴露出請(qǐng)求的真實(shí)IP的問題,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-10-10
  • 使用Nginx實(shí)現(xiàn)301跳轉(zhuǎn)至https的根域名示例代碼

    使用Nginx實(shí)現(xiàn)301跳轉(zhuǎn)至https的根域名示例代碼

    這篇文章主要介紹了使用Nginx實(shí)現(xiàn)301跳轉(zhuǎn)至https的根域名,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • nginx參數(shù)的詳細(xì)介紹

    nginx參數(shù)的詳細(xì)介紹

    這篇文章主要介紹了nginx參數(shù)的詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • 詳解Nginx服務(wù)器的配置中開啟文件Gzip壓縮的方法

    詳解Nginx服務(wù)器的配置中開啟文件Gzip壓縮的方法

    這篇文章主要介紹了Nginx服務(wù)器的配置中開啟文件Gzip壓縮的方法,可以對(duì)CSS和JavaScript以及各種圖片等web傳輸?shù)奈募M(jìn)行壓縮,需要的朋友可以參考下
    2016-01-01
  • 如何利用nginx做代理緩存淺析

    如何利用nginx做代理緩存淺析

    Nginx緩存主要是用于減輕后端服務(wù)器的負(fù)載,提高網(wǎng)站并發(fā)量,提升用戶體驗(yàn)度,下面這篇文章主要給大家介紹了關(guān)于如何利用nginx做代理緩存的相關(guān)資料,需要的朋友可以參考下
    2021-12-12
  • Keepalived實(shí)現(xiàn)Nginx負(fù)載均衡高可用的示例代碼

    Keepalived實(shí)現(xiàn)Nginx負(fù)載均衡高可用的示例代碼

    這篇文章主要介紹了Keepalived實(shí)現(xiàn)Nginx負(fù)載均衡高可用的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • 前端必備的一些nginx知識(shí)點(diǎn)匯總

    前端必備的一些nginx知識(shí)點(diǎn)匯總

    Nginx是一個(gè)高性能的HTTP和反向代理web服務(wù)器,同時(shí)也提供了IMAP/POP3/SMTP服務(wù),下面這篇文章主要給大家匯總介紹了關(guān)于前端必備的一些nginx知識(shí)點(diǎn),文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-03-03

最新評(píng)論