Обратное проксирование Nginx на HTTPS-сервер приводит к ошибке 502 Bad Gateway?

Обратное проксирование Nginx на HTTPS-сервер приводит к ошибке 502 Bad Gateway?

Моя цель — написать тесты Jasmine (фреймворк тестирования JavaScript BDD), которые проверяют внутренний API, созданный отдельной командой.

У меня есть сервер Jasmine, работающий на порту 9000. Этот код выдает запросы AJAX с относительным путем, начинающимся с /web/. Я хочу, чтобы эти запросы направлялись на бэкэнд.

На данный момент у меня есть обратный прокси-сервер для вышестоящего блока, например такой:

upstream backend {
  server api-dev.example.com;
}

server {
  ...

  location / {
    proxy_pass http://localhost:9000;
    ...
  }

  location /web/ {
    proxy_pass https://backend/web/;
    ...
  }
}

Трафик на '/' работает нормально, но запросы AJAX (например, на

http://localhost:50000/web/internal?action=network-statistics

) 502'ing. Я считаю, что он попадает на правильную конечную точку, но есть ошибка SSL. Журнал ошибок Nginx, похоже, подтверждает мои подозрения:

2013/12/13 16:55:28 [error] 1885#0: *257 SSL_do_handshake() failed (SSL: error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol) while SSL handshaking to upstream, client: 127.0.0.1, server: localhost, request: "GET /web/internal/stats?action=network-statistics&request=null HTTP/1.1", upstream: "https://50.18.192.173:80/web/internal/stats?action=network-statistics", host: "localhost:50000", referrer: "http://localhost:50000/"

Однако, если я изменю блок upstream на:

upstream backend {
  server api-dev.example.com:443;
}

…тогда я получаю 404. Могу поклясться, что видел похожие конфигурации, работающие в другом месте на Server Fault. Например,этоточень похожий вопрос. Что я упускаю? Что может быть не так? Извините, если это расплывчато, я с радостью добавлю больше подробностей.

решение1

Попробуйте удалить /web/. Я думаю, вы получаете 404, потому что он пытался получить доступ к /web/web, который не существует. Вы должны быть в состоянии найти больше подсказок в журналах Nginx.

upstream backend {
        server api-dev.example.com:443;
}

server {
        ...

    location / {
        proxy_pass http://localhost:9000;
        ...
    }

    location /web/ {
        proxy_pass https://backend;
        ...
    }
}

Связанный контент