Как перенаправить NGINX на основе http-файлов cookie

#http #nginx #server #routes

Вопрос:

У меня есть конфигурация NGINX, подобная этой

 server {
    listen       80;
    server_name  localhost;

    #any request without the http cookie has to be redirected to login
    location / {
        if ($http_cookie ~* "user_tokens") {
            return 302 http://127.0.0.0:5000/;
            #break;
        } 
        root   /usr/share/nginx/html;
        index  index.html index.htm;
        try_files $uri $uri/ /index.html;
    }
}
 

Идея состоит в том, чтобы настроить правило маршрутов следующим образом

  • Любой запрос без файла cookie будет перенаправлен на сервер входа в систему(5000).
  • В противном случае он должен обслуживать страницы в корне.

Но это работает не так, как ожидалось, он всегда обслуживает страницы из корня.

Комментарии:

1.Используйте !~* для условий, в которых $http_cookie не содержится user_tokens .

Ответ №1:

Было ошибкой предполагать, что ~* это отрицательное состояние, так оно и есть на самом деле !~* .

if ($http_cookie !~* "user_tokens")