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

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

Я бы хотел, чтобы определенные файлы 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;
        }
    }
}

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
Другие вопросы по тегам