Мой curl
запрос выглядит следующим образом:
curl --header "Authorization: Basic BASE_64" https://example.com --tlsv1 -k
(Мне нужно явно указать TLS
и пропустить проверку)
и это работает. Я бы хотел настроить nginx
действовать как промежуточное программное обеспечение и обрабатывать аутентификацию для удаленного сервера.
location / {
proxy_pass {{ remote_server }};
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Authorization "Basic {{ base64_token }}";
}
К сожалению, с этими настройками я получил 403 запрещенных. Что я делаю иначе, чем в curl
запрос?
Мой error.log
показывает:
2014/12/20 02:40:12 [error] 15676#0: *13 connect() failed (111: Connection refused) while connecting to upstream, client: MY_OWN_IP, server: _, request: "GET /MY_REQUESTED_ENDPOINT HTTP/1.1", upstream: "https://MY_REMOTE_UPSTREAM", host: "MY_SERVER_IP"
2014/12/20 02:40:24 [info] 15676#0: *15 client timed out (110: Connection timed out) while waiting for request, client: MY_OWN_IP, server: 0.0.0.0:80
Очень важно то, что MY_UPSTREAM
принимает подключения только от MY_SERVER_UP
, поэтому я создаю это промежуточное ПО.
Окончательная рабочая конфигурация
location / {
proxy_pass {{ remote_server }};
proxy_set_header Authorization "Basic {{ base64_token }}";
}
Мы не должны проходить мимо $host
(мы хотим, чтобы наше промежуточное ПО было хостом) или $scheme
(Я не использую SSL в промежуточном программном обеспечении, в то время как восходящий поток использует).