Управление Nginx проксирует цель с помощью cookie?

это не о размере, но скорости, которой Вы требуете. SAS является партией быстрее. Однако, потому что набор данных является ~0.5GB, и у Вас есть 4 ГБ, и выращивать уровень является настолько медленным, Вы могли бы также просто загрузить все в память (mysql кэш) и не волноваться о скорости жесткого диска.

10
задан 12 May 2011 в 15:00
4 ответа

Аналогично этому ответу . Идиоматический подход Nginx к подобным проблемам основан на использовании map .

По сути, вы определяете map в http section

map $cookie_proxy_override $my_upstream {
  default default-server-or-upstream;
  ~^(?P<name>[\w-]+) $name;
}

Затем вы просто используете $ my_upstream в месте раздел (ы):

location /original-request {
  proxy_pass http://$my_upstream$uri;
}

Nginx вычисляет переменные карты лениво, только один раз (на запрос) и когда вы их используете.

16
ответ дан 2 December 2019 в 22:04

Вы сделали, пробуют $http_cookie? http://wiki.nginx.org/HttpRewriteModule

если ($http_cookie ~ * "proxy-target-A") {нечто;}

0
ответ дан 2 December 2019 в 22:04

у меня есть образец, который я использую для обнаружения заголовка запроса на основе udid, и он работает, могли бы быть Вы, получит некоторое представление.

   location / {
      proxy_set_header Host $http_host;
  if ($request_uri ~ ^/(.*)udid=xxxxxxxxxxxxxx(.*)$) {
    proxy_pass   http://1.1.1.1$request_uri;
    break;
  }
  if ($request_uri ~ ^/(.*)udid=yyyyyyyyyyyyyy(.*)$) {
    proxy_pass   http://3.3.3.3$request_uri;
    break;
  }
       proxy_pass http://2.2.2.2$request_uri;
    }
0
ответ дан 2 December 2019 в 22:04

В конечном итоге мое решение сводится к следующему:

server {
    ...
    set $upstream "default-server-or-upstream";
    if ($http_cookie ~ "proxy_override=([\w-]+)") {
        set $upstream $1;                                   
    }

    location /original-request {
        proxy_pass http://$upstream/original-application
    }
}

Тест выполняется в области server для каждого запроса (до разрешения фактического перенаправления) и просто используется для установки переменной - очевидно, это поддерживаемое использование модуля перезаписи Nginx. Он также проверяет весь $ http_cookie , как предложил @Rikih, но включает имя файла cookie, чтобы убедиться, что я не сопоставляю случайные вещи, которые люди могут мне бросать.

Затем в область , где я хочу выполнить перенаправление, я использую имя переменной, которое либо содержит конфигурацию восходящего потока по умолчанию, либо было перезаписано файлом cookie.

2
ответ дан 2 December 2019 в 22:04

Теги

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