Изгаляемся с nginx

Mar 13, 2023 21:47


... Иногда на службе подкидывают полностью **нутые на всю голову задачи. Но что поделаешь, работа...

Задача 1. В POST-запросах от клиента к upstream-у нужно везде подменять слово "pineapple" на "banana", а в ответах проводить обратную процедуру: менять "banana" на "pineapple".

Решение.
server {
listen 80 default_server;
proxy_set_header Accept-Encoding "";

location /fruits/ {
client_body_buffer_size 128k;
client_body_in_single_buffer on;

if ($request_method = POST)
{
lua_need_request_body on;

access_by_lua_block {
ngx.req.read_body()
local body = ngx.req.get_body_data()
if body then
body = ngx.re.gsub(body, "pineapple", "banana")
end
ngx.req.set_body_data(body)
}
}

sub_filter_once off;
sub_filter 'banana' 'pineapple';
sub_filter_types text/xml;
proxy_pass http://fruitstream/some/url/;
}
}

Нужно из запроса обязательно вырезать заголовок "Accept-Encoding", иначе бэкенд может выдать ответ в сжатом виде (например, каким-нибудь gzip-ом), и тогда подмена не отработает.

Задача 2. Закамуфлировать фронтенд так, чтобы с первого взгляда было непонятно, что на нём работает nginx.

Решение.
server_tokens off;
more_clear_headers Server;

Всем хороших веб-серверов и не-**нутых задач.

трудовыебудни, nginx

Previous post Next post
Up