#node.js #linux #apache #nginx #server
Вопрос:
Я использую СРЕДНИЙ стек, и я уже мог бы запустить свой интерфейс. После ng build
того, как я переместил все содержимое dist
папки на var/www/html
свой веб-сайт и смог получить доступ к нему. Я использую Apache, и мой интерфейс теперь доступен онлайн. Теперь проблема в моем бэкэнде. Я использую Node.js но я понятия не имею, как я могу сделать это «онлайн» для всех. С npm start server.js
помощью или pm2 start server.js
я могу сделать свой Node.js сервер запущен, и все работает нормально, но это работает только для меня. Когда мой друг зашел на мой сайт, серверная часть не запущена (только интерфейс).
Поэтому мой вопрос в том, как я могу сделать свой node.js общедоступный сервер? Есть ли способ убежать node.js в Апаче тоже?
На самом деле я сделал прокси-сервер apache и даже с nginx, но, похоже, пока не работает…
Я последовал этому шагу отсюда: https://www.digitalocean.com/community/tutorials/how-to-set-up-a-node-js-application-for-production-on-ubuntu-14-04
а также отсюда: https://medium.com/@pierangelo1982/using-nodejs-app-with-apache-374b37c6140d
Редактировать:
Я могу обслуживать свой сервер с помощью nginx, но мне нужно остановить свой сервер Apache, но мой сервер apache обслуживает интерфейс angular…
Что мне делать?
ПРАВКА2:
Благодаря помощи Gouveia я могу обслуживать фронт и бэкэнд с помощью NGINX
server {
listen 80;
server_name http://travelinked.vm.mi.hdm-stuttgart.de;
location / {
root /var/www/html;
}
location /api {
proxy_pass http://141.62.65.110:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
Как вы можете видеть, сайт доступен, но по-прежнему серверная часть не работает за пределами моей интрасети. Для меня бэкэнд загружается, но для вас, ребята, я думаю, что нет
http://travelinked.vm.mi.hdm-stuttgart.de является ли веб-сайт
Ответ №1:
Когда вы запускаете npm start server.js
, вы запускаете сервер самостоятельно.
Если вы хотите, чтобы все запросы проходили через Apache, вы можете использовать простой обратный прокси-сервер для подключения от Apache к вашей серверной части nodejs (при условии, что ваш сервер node js работает на порту 8080).:
ProxyPass "/api" "http://localhost:8080/"
Конфигурационные файлы Apache в Linux обычно находятся здесь: /etc/apache2/sites-available/
.
Если вы хотите использовать Nginx вместо этого, вы можете обслуживать с его помощью свои статические файлы, а также перенаправлять запросы в API:
server {
location / {
# Path to your angular dist folder
root /path/to/static/files;
}
location /api {
# Address of your nodejs server
proxy_pass http://localhost:8080/;
}
}
Файл конфигурации в Linux обычно находится здесь: /etc/nginx/nginx.conf
.
При обоих подходах доступ к вашему серверу Apache/Nginx по /api/*
пути приведет к отправке запроса на сервер nodejs.
В случае Nginx путь /api включен в путь запроса к серверу nodejs. Чтобы удалить эту часть пути, вам понадобится правило перезаписи:
location /api {
# Address of your nodejs server
proxy_pass http://localhost:8080/;
# This removes the /api part in the request to the backend
rewrite /api/(.*) /$1 break;
}
Я использовал localhost в примерах, так как предполагаю, что вы запускаете все на одной машине.
Для получения более подробной информации и настроек я бы посоветовал проверить связанную документацию.
Комментарии:
1. Эй, спасибо! Я отредактировал свой пост! Серверная часть все еще работает локально, хотя с NGINX я все еще что-то упускаю?
2. Ваш код интерфейса, похоже, указывает на IP-адрес серверной части ( 141.62.65.110:3000/gettoptours ) вместо
http://travelinked.vm.mi.hdm-stuttgart.de/api/gettoptours
.3.Эй, это снова я, по какой-то причине он не может получить
/api
доступ, когда яhttp://travelinked.vm.mi.hdm-stuttgart.de/api
Hello World
должен быть там, но вместо этого я получаюCannot GET /api
4. На данный момент я не уверен, но вам, возможно, потребуется либо изменить путь ваших маршрутов в коде node js для включения
/api
, либо изменить конфигурацию nginx, чтобы переписать путь. Видишь serverfault.com/questions/379675/… Согласно ответу, в вашем случае это было бы примерно так: переписать /api/ (.*) /перерыв в 1 доллар;5. Переписывание пути действительно помогло! Теперь это наконец-то работает! Огромное спасибо.