在 Ubuntu 上设置 Node.JS 服务器

问题描述 投票:0回答:2

我正在使用 MEAN Stack,我已经可以运行我的前端了。

ng build
之后,我将
dist
文件夹中的所有内容移至
var/www/html
并且可以访问我的网站。我正在使用 Apache,我的前端现在可以在线使用。现在问题是我的后端。我正在使用 Node.js,但我不知道如何让它为每个人“在线”。使用
npm start server.js
pm2 start server.js
我可以让我的 Node.js 服务器运行并且一切正常,但它只对我有用。当我的朋友访问我的网站时,后端未运行(仅前端)。

所以我的问题是,如何公开我的 Node.js 服务器?有没有办法在 Apache 中运行 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是网站

node.js linux apache nginx server
2个回答
1
投票

当您运行

npm start server.js
时,您正在运行自己的服务器。

如果您希望所有请求都通过 Apache,那么您可以使用 简单反向代理 从 Apache 连接到您的 Nodejs 后端(假设您的 Node JS 服务器在端口 8080 上运行):

ProxyPass "/api"  "http://localhost:8080/"

Linux 中的 Apache 配置文件通常位于此处:

/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

使用这两种方法,访问

/api/*
路径上的 Apache/Nginx 服务器都会向 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,因为我假设您在同一台计算机上运行所有内容。

有关更多详细信息和配置,我建议查看链接文档。


0
投票

对于 Apache,您可以尝试以下操作:

  1. 启用必需的 apache 模块 sudo a2enmod 代理 sudo a2enmod proxy_http sudo a2enmod 重写 sudo a2enmod 标头 sudo a2enmod 过期

  2. 创建虚拟主机配置,例如。 sudo nano /etc/apache2/sites-available/travelinked.conf

    服务器名称 Travelinked.vm.mi.hdm-stuttgart.de 服务器别名 www.travelinked.vm.mi.hdm-stuttgart.de 位置/{根/var/www/html; 代理请求关闭 ProxyPreserveHost 开启 代理通过完整 要求全部授予 代理密码 / http://localhost:3000/ ProxyPassReverse / http://localhost:3000/ 错误日志 ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log 组合

  3. sudo a2ensite Travelinked.conf

  4. sudo systemctl restart apache2/ sudo service apache2 restart

  5. pm2 最后启动 server.js,pm2 启动 server.js 来启动和管理你的 Node.js 进程。 ============================= 关于您在 EDIT2 中所述的 Nginx:我可能会添加一些。

    服务器{ 听80;

    服务器名称travelinked.vm.mi.hdm-stuttgart.de;

    地点/{ 根/var/www/html; try_files $uri $uri/ =404; }

    位置/api { proxy_pass http://141.62.65.110:3000; proxy_http_版本 1.1; proxy_set_header 升级 $http_upgrade; proxy_set_header 连接“升级”; proxy_set_header 主机 $host; proxy_cache_bypass $http_upgrade; } }

  • 从 server_name 中删除 http://:server_name 指令应仅包含不带 http:// 前缀的域名。 服务器名称 Travelinked.vm.mi.hdm-stuttgart.de;
  • try_files:添加以在根位置正确处理请求。
  • proxy_set_header 连接“升级”;:确保正确处理 WebSocket 连接。
© www.soinside.com 2019 - 2024. All rights reserved.