Proxypass Apache, только если порт в хосте

У меня есть приложение node, работающее на порту 1234. Поскольку я не хочу, чтобы номер порта отображался где-либо, у меня есть правило ProxyPass в моем Apache:

<VirtualHost *:80>
  ProxyPass /node http://example.com:1234
  ProxyPassReverse /node http://example.com:1234
</VirtualHost>

Он работает отлично: когда я ввожу в браузере http://example.com/node, отображается ожидаемая страница . Когда я также ввожу http://example.com:1234, но я не хочу, чтобы этот URL отображать в моем браузере. Вот почему я добавил javascript для изменения window.location, если в URL-адресе есть «1234»...

Это не очень хорошее решение, потому что перед перенаправлением страница должна загрузиться, и пользователь увидит номер порта. Я хотел бы знать, можно ли сразу перенаправить example.com:1234 на example.com/node с помощью правила Apache. Я просмотрел всю документацию, но решение не очевидно...


person djcaesar9114    schedule 05.12.2017    source источник
comment
Что вам нужно сделать, так это настроить приложение узла для прослушивания 127.0.0.1, таким образом example.com:1234 будет работать только с локального хоста, т. е. оно будет недействительным для любых внешних посетителей сайта.   -  person arco444    schedule 05.12.2017
comment
Да, я понимаю, но я не упомянул, что пользователь приходит в мое приложение после входа в систему через систему единого входа, которая перенаправляет пользователя на хост :1234. Я не могу это изменить, потому что я не имею отношения к SSO.   -  person djcaesar9114    schedule 05.12.2017
comment
Переместите приложение узла на другой порт; Иметь еще один VirtualHost (*:1234) с Redirect / http://example.com/   -  person Dusan Bajic    schedule 05.12.2017
comment
Если я это сделаю, когда я запускаю свое приложение узла, оно говорит, что порт уже используется. :(   -  person djcaesar9114    schedule 05.12.2017
comment
На самом деле @DusanBajic ваш ответ был правильным. Можете ли вы опубликовать его, чтобы я мог проголосовать за вас?   -  person djcaesar9114    schedule 07.12.2017


Ответы (1)


Если вы не можете изменить URL-адрес перенаправления системы единого входа, я бы предложил следующее:

  1. Запустите приложение на другом порту (например, 1235)

  2. Создайте дополнительный VirtualHost, прослушивающий порт 1234, и используйте его для перенаправления на: 80 с Redirect / http://example.com/

  3. Измените существующий URL-адрес ProxyPass, чтобы перейти на порт 1235.

person Dusan Bajic    schedule 07.12.2017
comment
Точнее, для тех, кто сталкивается с той же проблемой, мое приложение node работает на порту 1234, а VirtualHost *: 1234 имеет только одно правило: redirect / example.com/node, прокси-пасс оставлен без изменений для *:80, но ваш комментарий мне очень помог! - person djcaesar9114; 07.12.2017