Белый список файлов cookie Openresty при использовании proxy_pass

Я настраиваю открытый обратный прокси, который будет направлять трафик на один из двух бэкэндов в зависимости от пути.

Я бы хотел, чтобы определенные файлы cookie из backend1 не передавались backend2.

Что делать?

Вот мой nginx.conf:

worker_processes 1;
error_log stderr;

env BACKEND_URL;
env BACKEND2_URL;

events {
    worker_connections 1024;
}
http {
    resolver local=on;

    server {
        listen 80;

        root   /usr/share/nginx/html;
        include       /usr/local/openresty/nginx/conf/mime.types;
        
        set_by_lua $backend_url 'return os.getenv("BACKEND_URL")';
        set_by_lua $backend2_url 'return os.getenv("BACKEND2_URL")';

        location / {
            try_files $uri $uri/ /index.html;
        }

        location ~ /backend/(.*)$ {
            proxy_pass $backend_url$1$is_args$args;
        }

        location /backend2/ {
            access_by_lua_block {
                
            }
            proxy_pass $backend2_url;
        }
    }
}

0
задан 6 September 2020 в 18:49
1 ответ

Вы можете использовать следующий.

rewrite_by_lua_file /usr/local/openresty/lualib/remove_cookies.lua;
proxy_set_header Cookie $modified_cookie;
set $modified_cookie "";

И в вашем файле remove_cookies.lua

local whiteList = { "cookiename1", "cookiename2" } ...
local newCookieHeader = nil
for index, value in ipairs(whiteList) do
    local cookieValue = assert(loadstring("return ".. "ngx.var.cookie_" .. value))()
    if cookieValue ~= nil then
        if newCookieHeader == nil then
            newCookieHeader = value .. "=" .. cookieRequestValue .. "; "
        else
            newCookieHeader = newCookieHeader .. value .. "=" .. cookieRequestValue .. "; "
        end
    end
end

ngx.var.modified_cookie = newCookieHeader
1
ответ дан 7 May 2021 в 14:13

Теги

Похожие вопросы