亚欧色一区w666天堂,色情一区二区三区免费看,少妇特黄A片一区二区三区,亚洲人成网站999久久久综合,国产av熟女一区二区三区

  • 發布文章
  • 消息中心
點贊
收藏
評論
分享
原創

基于OpenResty的token驗證和動態跳轉

2023-10-07 08:15:44
82
0

背景:非對象存儲的靜態資源圖片沒有做權限限制,任何人拿到URL都可以訪問,我們的靜態資源都是由Nginx直接做的映射,所以需要做token驗證,在有效期內驗證通過才可以訪問。

首先明確一個概念,OpenResty 是 Nginx 和 Lua 的結合體,而非 Nginx 的擴展。普通的nginx無法編寫lua腳本,但OpenResty可以做到。如果之前機器上安裝過了 Nginx,建議是先卸載掉再安裝OpenResty

步驟1:創建verify_token.lua腳本:

-- 獲取請求頭
local headers = ngx.req.get_headers()
-- 獲得請求頭中的 token 參數
local token = headers["token"]
if token then
    -- 這里連接了本地redis,如果有密碼,需要加上 -a 參數
    local cmd = "redis-cli -h 127.0.0.1 -p 6379 -n 0 get "..token
    local f = io.popen(cmd)
    res = tostring(f:read())
    f:close()
    -- 這里判斷 redis 中是否存在 token
    if res ~= " " then
        -- 在這里可以加一些復雜邏輯
        return "URL A"
    else
        return "URL B"
    end
else
    return "URL C"
end

步驟2在 nginx.conf 文件中加入配置:

server {
        listen       8005;
        server_name  localhost;

        location / {
            resolver 8.8.8.8;
            set_by_lua_file $full_proxy_pass 絕對路徑/verify_token.lua;

            proxy_set_header Host $proxy_host;
            proxy_pass  $full_proxy_pass;
        }
    }

注意這里有兩個關鍵配置,如果不加上,跳轉的時候就會報404錯誤

關鍵配置1

proxy_set_header Host $proxy_host;

語法

proxy_set_header field value;

默認值

proxy_set_header Host $proxy_host;

proxy_set_header Connection close;

上下文

http, server, location

proxy_set_header 允許重新定義或者添加發往后端服務器的請求頭。

value可以包含文本、變量或者它們的組合。

當且僅當當前配置級別中沒有定義proxy_set_header指令時,會從上面的級別繼承配置。 默認情況下,只有兩個請求頭會被重新定義:

proxy_set_header Host       $proxy_host;
proxy_set_header Connection close;

所以上述 nginx.conf 如果不重新定義 proxy_set_header Host 的話,那么默認 Host 值就還是當前訪問路徑的 Host 信息。

關鍵配置2

resolver 8.8.8.8;

反向代理的場景下,upstream后端用域名時,配置resolver以便于nginx能夠解析該域名。

平時我們在配置NG upstream 時,一般都是指定 IP 地址或者是地址池,或者是一個固定的域名。

但一些復雜的場景,比如我們的 upstream 是變量的 servername,這時候需要用到resolver 的指令用來對變量做解析了。

 

0條評論
作者已關閉評論
Mr. 油
92文章數
0粉絲數
Mr. 油
92 文章 | 0 粉絲
原創

基于OpenResty的token驗證和動態跳轉

2023-10-07 08:15:44
82
0

背景:非對象存儲的靜態資源圖片沒有做權限限制,任何人拿到URL都可以訪問,我們的靜態資源都是由Nginx直接做的映射,所以需要做token驗證,在有效期內驗證通過才可以訪問。

首先明確一個概念,OpenResty 是 Nginx 和 Lua 的結合體,而非 Nginx 的擴展。普通的nginx無法編寫lua腳本,但OpenResty可以做到。如果之前機器上安裝過了 Nginx,建議是先卸載掉再安裝OpenResty

步驟1:創建verify_token.lua腳本:

-- 獲取請求頭
local headers = ngx.req.get_headers()
-- 獲得請求頭中的 token 參數
local token = headers["token"]
if token then
    -- 這里連接了本地redis,如果有密碼,需要加上 -a 參數
    local cmd = "redis-cli -h 127.0.0.1 -p 6379 -n 0 get "..token
    local f = io.popen(cmd)
    res = tostring(f:read())
    f:close()
    -- 這里判斷 redis 中是否存在 token
    if res ~= " " then
        -- 在這里可以加一些復雜邏輯
        return "URL A"
    else
        return "URL B"
    end
else
    return "URL C"
end

步驟2在 nginx.conf 文件中加入配置:

server {
        listen       8005;
        server_name  localhost;

        location / {
            resolver 8.8.8.8;
            set_by_lua_file $full_proxy_pass 絕對路徑/verify_token.lua;

            proxy_set_header Host $proxy_host;
            proxy_pass  $full_proxy_pass;
        }
    }

注意這里有兩個關鍵配置,如果不加上,跳轉的時候就會報404錯誤

關鍵配置1

proxy_set_header Host $proxy_host;

語法

proxy_set_header field value;

默認值

proxy_set_header Host $proxy_host;

proxy_set_header Connection close;

上下文

http, server, location

proxy_set_header 允許重新定義或者添加發往后端服務器的請求頭。

value可以包含文本、變量或者它們的組合。

當且僅當當前配置級別中沒有定義proxy_set_header指令時,會從上面的級別繼承配置。 默認情況下,只有兩個請求頭會被重新定義:

proxy_set_header Host       $proxy_host;
proxy_set_header Connection close;

所以上述 nginx.conf 如果不重新定義 proxy_set_header Host 的話,那么默認 Host 值就還是當前訪問路徑的 Host 信息。

關鍵配置2

resolver 8.8.8.8;

反向代理的場景下,upstream后端用域名時,配置resolver以便于nginx能夠解析該域名。

平時我們在配置NG upstream 時,一般都是指定 IP 地址或者是地址池,或者是一個固定的域名。

但一些復雜的場景,比如我們的 upstream 是變量的 servername,這時候需要用到resolver 的指令用來對變量做解析了。

 

文章來自個人專欄
文章 | 訂閱
0條評論
作者已關閉評論
作者已關閉評論
0
0