2016-07-08 3 views
0

У меня есть локальный сервер, работающий на 3000 портах, и он отправляет некоторый запрос POST на сервер nginx. Nginx должен проверить референт, если он не приходит с 127.0.0.1:3000 (со всеми подобластями), а затем возвращает 403 Restricted, в противном случае, если он действителен, перенаправляется на 9200/ошибки/конечную точку браузера.nginx - valid_referes dont work

В настоящее время он всегда перенаправляется независимо от того, действителен ли референт или нет. Я знаю, что в nginx if is evil, поэтому подход if-else не работает здесь.

server { 
    listen 127.0.0.1:9999; 
    server_name localhost;  

    location/{ 

     valid_referers none blocked server_names ~someaddress; 

     if ($invalid_referer) { 
      return 403; 
     } 

     # redirect to this endpoint if referer is valid  
     return 307 http://localhost:9200/errors/browser;  

    } 
} 
+0

'Referer' - это то, что вы видите в адресной строке браузера. Вы действительно видите там 127.0.0.1: 3000? –

+0

И вообще, я не вижу '127.0.0.1: 3000' в вашем списке допустимых ссылок –

ответ

-1

Я должен добавить

if ($invalid_referer != "1") { 
    return 403; 
} 

как это пустая строка в соответствии с documentation

$ invalid_referer пустая строка, если значение поля заголовка запроса «Referer» считается действителен, иначе «1».

+0

Empty' $ invalid_referer' означает, что referrer действителен. Почему вы хотите вернуть 403 действительному рефереру? –

+0

@AlexeyTen, право, я должен отредактировать его, правильный вариант - '$ invalid_referer! =" 1 "' Спасибо – Novitoll

+0

Это по-прежнему неверная логика –