Назад | Перейти на главную страницу

Сопоставить приложение node js с URL-адресом в Apache

Я хотел бы использовать приложение узла в качестве пути к моему домену, например: http://example.com/foo фактически будет обслуживать приложение узла, работающее на порту 8080.

Я просмотрел ProxyPass и ProxyPassReverse:

ProxyPass /foo http://localhost:8080
ProxypassReverse /foo http://localhost:8080

Это будет обслуживать index.html приложения узла, но я получаю в консоли ошибки обо всех активах:

Failed to load resource: the server responded with a status of 404 (Resource not found) http://example.com/styles/4742a4e8.main.css

Я думал, что директива ProxyPassReverse позаботится об этом, но, видимо, нет. у меня есть очень ограниченные знания об apache. Есть какие-нибудь яркие идеи, как это решить?

Отказ от ответственности: да, я изучил многие nodejs в сочетании с вопросами apache, но ни один из них не решает проблему использования подкаталога в URL-адресе

Я думаю об этом http://example.com/styles/4742a4e8.main.css на самом деле является файлом в приложении JS узла, поэтому относится к http://localhost:8080/styles/4742a4e8.main.css, но на него есть ссылка в index.html из вашего приложения узла как /styles/4742a4e8.main.css

При сопоставлении прокси-сервера происходит следующее: когда вы запрашиваете

http://example.foo/foo/ он отправляет запрос, который возвращается http://localhost:8080/index.html как есть. Любые ссылки в index.html не изменяются, поэтому, когда браузер запрашивает компоненты, он запрашивает http://example.com/styles/4742a4e8.main.css но файл действительно доступен только через http://example.com/foo/styles/4742a4e8.main.css

если / styles / не используется в example.com, вы можете добавить

ProxyPass /styles http://localhost:8080/styles
ProxypassReverse /styles http://localhost:8080/styles

Но это может стать обременительным, если у вас много каталогов.

Другой подход - использовать относительные пути в вашем приложении узла. Поэтому вместо ссылки на index.html /styles/4742a4e8.main.css он ссылался styles/4742a4e8.main.css (без ведущей косой черты). Это может стать громоздким из-за вложенных путей в вашем приложении узла.

Другим решением может быть изменение вашего приложения node.js, чтобы оно полностью запускалось под localhost: / foo, чтобы сопоставление каталогов было таким же.

Я не уверен, что какое-либо из этих решений идеально подходит для вашего варианта использования, но, надеюсь, они укажут вам правильное направление.