server {
server_name 127.0.0.1;
listen 3000;
location = /auth {
internal;
proxy_pass http://127.0.0.1:8088/auth;
}
location / {
auth_request /auth;
# force Nginx to preserver the response proxy_set_header
auth_request_set $falure_reason $sent_http_x_authenticationfail;
error_page 401 =200 /login;
proxy_pass http://127.0.0.1:9000;
}
location /login {
proxy_pass http://127.0.0.1:8081/sso;
}
}
Я работаю над службой аутентификации. Идея состоит в том, что когда запрос попадает в корневой каталог, он будет аутентифицирован (проверяет токен) через / auth, и сервер аутентификации сидит http://127.0.0.1:8088/auth для обработки всех запросов авторизации. Затем, если токен не установлен, сервер аутентификации ответит 401, и страница ошибки поймает это и перенаправит на / вход в прокси на мой сервер входа. http://127.0.0.1:8081/sso. Но проблема в том, что когда я прохожу через / -> / auth -> / login, URL-адрес запроса, возвращаемый с сервера, по-прежнему 127.0.0.1:3000/sso вместо ttp: //127.0.0.1: 8081 / sso, потому что впоследствии я необходимо отправить последующий почтовый запрос на http://127.0.0.1:8081/sso с идентификатором входа / паролем пользователя. Но nginx указывает мне на 127.0.0.1:3000/sso в браузере.
В конце концов, я разобрался сам. Поскольку nginx действует как обратный прокси-сервер, клиент будет иметь доступ только к URL-адресу прокси 127.0.0.1:3000/sso, поскольку nginx заботится о пересылке запроса и предоставляет клиенту только свой URL-адрес, а не URL-адрес своего базового сервера. Следовательно, чтобы отправить почтовый запрос обратно со стороны клиента на http://127.0.0.1:8081/sso, Мне нужно установить местоположение sso на сервере nginx для пересылки всех запросов с 127.0.0.1:3000/sso на http://127.0.0.1:8081/sso в качестве последовательного механизма прокси.