Почему мой обратный прокси-сервер Nginx.js + экспресс-сервер перенаправляет на 0.0.0.0? - PullRequest
5 голосов
/ 20 июня 2011

У меня есть сервер, настроенный для размещения нескольких приложений node.js + Express на нескольких доменах через интерфейс Ngnix. Все отлично работает, за исключением случаев, когда вызовы перенаправления сделаны из экспресс-маршрута:

res.redirect('/admin');

Затем браузер клиента перенаправляется на http://0.0.0.0:8090

Кажется, что это должно быть проблема с заголовками перенаправления, выходящими из экспресса, но на всякий случай это уместно, вот файл nginx.conf для рассматриваемого домена:

server {
    listen 0.0.0.0:80;
    server_name  *.example.com;

    access_log  /var/log/nginx_example_access.log;
    error_log  /var/log/nginx_example_error.log debug;

    # proxy to node
    location / {
        proxy_pass         http://0.0.0.0:8090/;
        proxy_redirect     off;

        proxy_set_header   Host             $proxy_host;
        proxy_max_temp_file_size 0;

        client_max_body_size       10m;
        client_body_buffer_size    128k;

        proxy_connect_timeout      90;
        proxy_send_timeout         90;
        proxy_read_timeout         90;

        proxy_buffer_size          4k;
        proxy_buffers              4 32k;
        proxy_busy_buffers_size    64k;
        proxy_temp_file_write_size 64k;
    }
}

1 Ответ

5 голосов
/ 22 июня 2011

решаемая.У меня была проблема в моем файле конфигурации nginx, из-за которой узел / экспресс получал неправильный заголовок запроса.Когда относительный путь передается в res.redirect, он извлекает Хост из входящего объекта req и устанавливает его в заголовке ответа.

        proxy_set_header   Host             $proxy_host;

должно было быть

        proxy_set_header   Host             $host;

$proxy_host - это восходящий адрес хоста 0.0.0.0:port

$host - это заголовок входящего запроса Хост example.com


ОБНОВЛЕНИЕ

Как указывает Луи Чатрио в комментариях, более новые версии Nginx заменили $host на $http_host, который в предыдущих версиях возвращал example.com:port, но теперь возвращает example.com.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...