Узел настройки.Сервер JS в Ubuntu

#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. Переписывание пути действительно помогло! Теперь это наконец-то работает! Огромное спасибо.