Express.js перенаправить с виртуальным путем - PullRequest
2 голосов
/ 24 февраля 2012

Итак, я настраиваю виртуальный путь, когда указываю на приложение node.js в моем nginx.conf. соответствующий раздел выглядит так:

location /app {
  rewrite /app/(.*) /$1 break;
  proxy_pass http://localhost:3000;
  proxy_redirect off;
  proxy_set_header Host $host;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

Отлично работает, кроме случаев, когда мое экспресс-приложение вызывает перенаправление.

Например, на устройстве dev работает порт nginx на порте 8080, поэтому URL-адрес корня приложения узла выглядит следующим образом:

http://localhost:8080/app

Когда я вызываю res.redirect('/app') из экспресса, фактический редирект переходит на:

http://localhost/app

Поскольку на порту 80 ничего не работает, очевидно, это не удается. Я также не смог найти никаких свойств объекта запроса, которые позволили бы мне создать URL-адрес как абсолютный URL-адрес. Любые идеи, кроме жесткого кодирования или превращения его в переменную среды?

* edit: после еще нескольких копаний похоже, что в этом случае заголовок хоста определяется как «localhost», а если я подключаюсь непосредственно к приложению expres, определяется заголовок хоста как 'localhost: 3000' (где 3000 - это порт, который прослушивает приложение узла). Итак, как мне изменить приведенное выше отображение, чтобы включить порт сервера nginx?

1 Ответ

4 голосов
/ 24 февраля 2012

Я почти уверен, что это из-за этой строки:

proxy_set_header Host $host;

Он установит заголовок Host на localhost Я думаю.См. Документацию по proxy_set_header .Я думаю, что это бы сработало:

proxy_set_header Host $http_host;

Он будет передавать заголовок Host из запроса клиента, который должен быть localhost:8080.

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