Используя навсегда, чтобы вечно запускать сервер узла на виртуальной машине, я не могу запустить приложение без явного добавления порта в 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 в конце.
Я использовал только a2en... чтобы включить их. Разве это не правильный путь? Есть ли дополнительные конфиги, которые мне нужно изменить? @jimmy5312
Я перешел по ссылке, которую вы мне прислали, добавил строку ProxyPass в свой файл proxy.conf и убедился, что два модуля LoadModules включены. Затем я добавил папку «узел» в /var/www и изменил DocumentRoot в site.conf, чтобы указать на это, и я все еще получаю ту же проблему.
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)
Надеюсь, это укажет вам правильное направление.
Я попробую это. Спасибо!
Я смог получить передний конец рендеринга. Но каждый вызов на сервер возвращался 404. Поэтому, если бы я вручную добавил порт: 8080, он правильно поймал бы запрос, но только тогда
Конфигурация, которая в конечном итоге сработала, была такой простой:
<VirtualHost *:80>
ServerName yourdomain.com
ProxyPreserveHost on
ProxyPass / http://localhost:8080/
</VirtualHost>
Похоже, я слишком усложнял это, пытаясь создать сложный прокси, но решение было очень просто добавить это в конфигурацию для приложения node, а затем запустить sudo systemctl restart apache2, и все заработало прекрасно.
Вы включили прокси-модуль для Apache, но правильно ли вы его настроили? Похоже на stackoverflow.com/questions/9831594/…