Моя цель - написать тесты 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 дюйма. Я считаю, что он попадает в правильную конечную точку, но есть ошибка 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 backend {
server api-dev.example.com:443;
}
… Тогда я получаю 404-е. Могу поклясться, что я видел, как подобные конфигурации работают в другом месте на Server Fault. Например, этот это очень похожий вопрос. Что мне не хватает? Что могло пойти не так? Извините, если это расплывчато, я с радостью добавлю подробности.
Попробуйте удалить / 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;
...
}
}