Назад | Перейти на главную страницу

Как проксировать запросы от Nginx к SSL серверу

Мой 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 в промежуточном программном обеспечении, в то время как восходящий поток использует).