2017-01-04 2 views
0

Я пытаюсь настроить обратный прокси nginx перед некоторыми внутренними серверами с помощью auth_request, чтобы защитить их от неавторизованных пользователей. У меня есть сценарий аутентификации, работающий по адресу 192.168.1.101/scripts/auth/user.php, доступ к которому осуществляется внутри блока/auth. Проблема в том, что я хотел бы использовать именованное местоположение, а не соответствующий URI, чтобы не было риска столкновения URI с внутренней службой (которую я не контролирую). Следующие работы:nginx auth_request для удаленного сценария аутентификации

server { 
listen 80; 
server_name private.domain.com; 

location /auth { 
    proxy_pass http://192.168.1.101/scripts/auth/user.php; 
    proxy_pass_request_body off; 
    proxy_set_header Content-Length ""; 
    proxy_set_header X-Original-URI $request_uri; 

} 

location/{ 
    auth_request /auth; 
    proxy_pass http://internal.domain.com; 
} 

} 

Я хотел бы, однако, чтобы заменить/авторизацию с @auth, когда я Nginx выдает ошибку во время relad. Я прочитал, что исправление заменяет proxy_pass внутри местоположения auth только с IP-адресом, однако, когда я делаю это, auth_request никогда не делает это для скрипта. Любые мысли о правильном способе работы с этой конфигурацией?

ответ

0

Из-за некоторых ограничений nginx указанные имена не могут использоваться для подзапроса. Вы можете запретить внешний доступ в auth-местоположении с опцией internal. Попробуйте эту конфигурацию:

location = /scripts/auth/user.php { 
    internal; 
    proxy_pass http://192.168.1.101; 
    proxy_pass_request_body off; 
    proxy_set_header Content-Length ""; 
    proxy_set_header X-Original-URI $request_uri; 
} 

location/{ 
    auth_request /scripts/auth/user.php; 
    proxy_pass http://internal.domain.com; 
} 
Смежные вопросы