Приложение реагента за прокси-сервером Apache не отображается

Я пытаюсь запустить веб-приложение Reagent за прокси-сервером Apache для пересылки HTTPS на сервер HTTP Jetty, на котором работает приложение Reagent. Вот правила Apache:

ProxyPass /bookmarx http://localhost:3000
ProxyPassReverse /bookmarx http://localhost:3000

Приложение работает нормально, когда я запускаю его локально, то есть http:// localhost:3000. Однако, когда я запускаю приложение через сервер Apache, например, https:// example.com/bookmarx, оно просто возвращает начальную страницу HTML (то есть ту, что с фрагментом кода ниже) и не выполняет Javascript (core/init).!) так что я вижу только пустую страницу.

<div id="app"></div>
<script src="js/app.js" type="text/javascript"></script>

Интересно, что я могу вызвать службу Clojure за ней, например, https://example.com/bookmarx/api/bookmarks и она возвращает закладки, поэтому я знаю, что прокси-сервер перенаправляет запросы, но ClojureScript не работает.

Я играл с правилами перезаписи и заголовками x-forwarded-proto, и это, похоже, не имело никакого значения.

Я также получаю те же результаты, если настраиваю сервер Apache для запуска его с использованием HTTP, а не HTTPS, поэтому я знаю, что это не вмешательство SSL.

Что мне нужно сделать, чтобы приложение работало через прокси?

3 ответа

В принципе, HTTPS здесь не должен иметь значения, единственное, что важно, это то, что браузер может получить ресурсы (файлы HTML+javascript), и является ли правильный javascript.

Первое, что нужно сделать, это открыть консоль разработчика браузера (view->developer->javascript console) и искать ошибки. Проверьте вкладку сети, чтобы убедиться, что загруженный файл javascript... еще один способ проверить, загружен ли javascript, состоит в том, чтобы просмотреть источник HTML-кода и щелкнуть или открыть ссылку на включенный javascript.

Вот несколько вещей для проверки:

  1. Js/app.js загружен? Попробуйте перейти по https://example.com/js/app.js (где корень страницы индекса совпадает с корнем js). Иногда ресурсы обслуживаются по другому маршруту при развертывании на хосте из-за конфигурации.
  2. Ваш развернутый app.js собран с использованием расширенной оптимизации? Все может пойти не так! Попробуйте заменить advanced с whitespace в вашей сборке развертывания, чтобы исключить это. Если это проблема, вы, вероятно, пропускаете некоторые внешние компоненты javascript. Обратите внимание, что если вы развертываете dev-сборку, вам также потребуется развернуть файлы компиляции. Вы можете проверить производственные сборки локально с lein cljsbuild once prod если у вас есть сборка под названием Prod.

  3. Есть ли сообщения об ошибках в консоли javascript? Здесь могут быть хорошие подсказки.

С той же самой проблемой я просто вставил больше правил, пока проблема не исчезла. Это то, что я использовал для решения проблемы с / api:

ProxyPassReverse /api http://0.0.0.0:3001/api
ProxyPass /api http://0.0.0.0:3001/api

Я использую Untangled, который является скорее основой, чем библиотекой. Поэтому, когда консоль разработчика Chrome рассказала мне об ошибке, это был первый раз, когда я понял, что /api,

Я разыскал проблему. Это произошло из-за неправильных маршрутов в секретаре / аккаунте. Он искал маршрут "/", который является правильным, когда локальный, но удаленный URL имел "/bookmarx/". Поэтому, когда я изменил маршрут на "/ bookmarx /", он работал нормально. Думаю, я предполагал, что Apache переписывал URL-адрес при его передаче.

(Чтобы выяснить этот безобидно простой ответ, потребовалось немало усилий, чтобы отыскать этот ответ. Оглядываясь назад, я мог бы сразу опубликовать код, тогда, возможно, его увидели бы другие глаза. Уроки извлечены. Спасибо всем за помощь.)

Другие вопросы по тегам