Проксировать приложение узла/реакции на сервере apache

Используя навсегда, чтобы вечно запускать сервер узла на виртуальной машине, я не могу запустить приложение без явного добавления порта в URL-адрес, например: URL.com:8080 Если я не использую порт в URL-адресе, я загружаю файловую структуру приложения.

Шаги для воспроизведения: у меня есть приложение create-реагировать-приложение. На виртуальном сервере я запускаю «npm run build», чтобы убедиться, что у меня есть сборка для обслуживания. Затем я запускаю навсегда запуск в корне приложения.

В приведенном ниже коде должны быть указаны все необходимые детали. Я могу предоставить больше, если вам нужно.

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

Пакет.json:

...
"main":"server/index.js",
"proxy":"http://localhost:8080"
...

URL-адрес Apache.conf:

<VirtualHost *:80>
    ServerName URL.com
    ServerAlias URL.com:8080/
    DocumentRoot /var/www/nameOfApp/
<Directory />
    Options -Indexes +FollowSymLinks
    AllowOverride All
</Directory>
<Directory /var/www/nameOfApp/public>
    Options +Indexes +FollowSymLinks +MultiViews
    AllowOverride All
</Directory>
</VirtualHost>

Файл сервера узла с использованием экспресса:

app.use(express.static(`${__dirname}/../build`));

Я также убедился, что у меня включены модули, позволяющие использовать прокси. Поэтому я думаю, что мне нужно запросить этот сайт, а не :8080 в конце.

Вы включили прокси-модуль для Apache, но правильно ли вы его настроили? Похоже на stackoverflow.com/questions/9831594/…

jimmy5312 31.05.2019 20:36

Я использовал только a2en... чтобы включить их. Разве это не правильный путь? Есть ли дополнительные конфиги, которые мне нужно изменить? @jimmy5312

Stefano Martinengo 31.05.2019 21:03

Я перешел по ссылке, которую вы мне прислали, добавил строку ProxyPass в свой файл proxy.conf и убедился, что два модуля LoadModules включены. Затем я добавил папку «узел» в /var/www и изменил DocumentRoot в site.conf, чтобы указать на это, и я все еще получаю ту же проблему.

Stefano Martinengo 31.05.2019 21:22
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
3
4 614
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Apache и NodeJS — это два разных и отдельных приложения. Вы взаимодействуете с ними, отправляя запрос на порт, который они слушают. В вашем случае здесь,

Apache is listening at port 80

Your NodeJS application is listening at port 8080

Таким образом, все запросы к порту 80 будут обрабатываться Apache, и, поскольку у вас нет index.html, Apache по умолчанию будет просто перечислять файлы и каталоги (индексы параметров). До этого момента ваше приложение узла ничего не знает о вашем запросе.

Итак, что вам нужно сделать, это определить некоторую конечную точку, скажем, url.com/node, и указать Apache пересылать все запросы этой конечной точки на порт 8080 и позволить вашему приложению узла выполнять эту работу.

Как это сделать?

http://httpd.apache.org/docs/2.2/mod/mod_proxy.html#proxypass

Рекомендации по запуску Node.js с портом 80 (Ubuntu/Linode)

Node.js + Nginx — что теперь?

Надеюсь, это укажет вам правильное направление.

Я попробую это. Спасибо!

Stefano Martinengo 31.05.2019 21:45

Я смог получить передний конец рендеринга. Но каждый вызов на сервер возвращался 404. Поэтому, если бы я вручную добавил порт: 8080, он правильно поймал бы запрос, но только тогда

Stefano Martinengo 01.06.2019 00:17
Ответ принят как подходящий

Конфигурация, которая в конечном итоге сработала, была такой простой:

<VirtualHost *:80>
    ServerName yourdomain.com
    ProxyPreserveHost on
    ProxyPass / http://localhost:8080/
</VirtualHost>

Похоже, я слишком усложнял это, пытаясь создать сложный прокси, но решение было очень просто добавить это в конфигурацию для приложения node, а затем запустить sudo systemctl restart apache2, и все заработало прекрасно.

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