NginX - переписать http_referer

Я использую Nginx в качестве прокси для моего внутреннего сервера. И мое приложение будет хранить все ссылки на базу данных. Чтобы уменьшить пространство базы данных, я хочу игнорировать некоторые из рефереров по некоторым условиям.

Я хочу удалить часть http_referer, если в URI есть какая-то строка.

Поскольку nginx не может использовать [proxy_set_header Referer ""] внутри "if {...}",

Итак, я пытаюсь использовать "карту", ​​но она все еще не работает. Вот моя конфигурация

http {
....
  map $http_referer $ref {
     default $http_referer;
  }
....
}

server {
......
  if ($request_uri ~ .*XXXXXXX.*) {
     set $ref "";     
  }
  proxy_set_header Referer $ref;
...... 
}
  • Я могу создать переменную $ref
  • Он может сопоставить $ref заголовку с помощью "proxy_set_header Referer $ref"
  • Но "если" не может изменить значение $ref

Разве мы не можем изменить глобальную переменную внутри "если"?

1 ответ

Вы можете попробовать этот код

map $http_referer $ref {
    default $http_referer;
    ~*(badref.com) 1;
}

и к разделу сервера

if ($ref = '1') {
    set $ref "";
}
proxy_set_header Referer $ref;

Для проверки $request_uri и $http_referer в одном условии вы можете использовать

map $http_referer$request_uri $ref {
    default $http_referer;
    ~*.*badref.com.*XXXXXXX.* "";
}
proxy_set_header Referer $ref;
Другие вопросы по тегам