在Ubuntu 16.04上使用Apache为网站设置Node.js应用

2020年12月31日19:40:41 发表评论 59 次浏览

介绍

Node.js是一个JavaScript运行时环境, 可让你轻松构建服务器端应用程序。本教程将说明如何设置运行Ubuntu 16.04的Cloud Server, 以使Node.js脚本作为服务运行, 并配置Apache服务器以使该脚本可从Web访问。

尽管可以使用以下命令从命令行运行Node.js脚本屏幕, 使用流程管理器PM2将脚本作为服务运行, 可以为脚本提供更强大的行为集。当以此方式作为服务运行时, 如果重新引导服务器或脚本崩溃, 脚本将自动重新启动。

PM2是Node.js的流程管理器, 具有多种功能, 可用于控制和管理Node.js脚本。访问PM2官方网站有关使用PM2的更多信息。

要求

  • 运行Linux(Ubuntu 16.04)的云服务器。
  • 指向服务器的有效域名
  • Apache Web服务器已安装并正在运行。

安装Node.js

更新服务器的软件包并安装卷曲使用以下命令:

sudo apt-get update
sudo apt-get install curl

下载Node.js PPA:

curl -sL https://deb.nodesource.com/setup_6.x -o nodesource_setup.sh

跑过nodesource_setup.sh将PPA添加到服务器的程序包缓存中的命令:

sudo bash nodesource_setup.sh

注意:此脚本将自动更新服务器。无需跑步apt-get更新第二次。

安装Node.js:

sudo apt-get install nodejs

这将自动安装npm也一样

最后, 安装必要的npm的软件包:

sudo apt-get install build-essential

创建一个示例Node.js应用程序

在此示例中, 我们将从在你网站的文档根目录中创建一个单独的目录来容纳Node.js应用程序开始:

sudo mkdir /var/www/html/nodejs

创建文件hello.js在此目录中:

sudo nano /var/www/html/nodejs/hello.js

将以下内容放入文件中:

#!/usr/bin/env nodejs
var http = require('http');
http.createServer(function (request, response) {
   response.writeHead(200, {'Content-Type': 'text/plain'});
   response.end('Hello World! Node.js is working correctly.\n');
}).listen(8080);
console.log('Server running at http://127.0.0.1:8080/');

保存并退出文件。

使文件可执行:

sudo chmod 755 hello.js

安装PM2

采用npm使用以下命令安装PM2:

sudo npm install -g pm2

开始hello.js使用以下命令的示例脚本:

sudo pm2 start hello.js

作为根将PM2添加到启动脚本中, 以便在重新启动服务器后它将自动重新启动:

sudo pm2 startup systemd

配置Apache

要从Web访问Node.js脚本, 请安装Apache模块代理和proxy_http使用以下命令:

sudo a2enmod proxy
sudo a2enmod proxy_http

安装完成后, 请重新启动Apache以使更改生效:

sudo service apache2 restart

接下来, 你将需要添加Apache代理配置。这些指令需要插入到虚拟主机该站点的主Apache配置文件中的命令块。

按照惯例, 此Apache配置文件通常是/etc/apache2/sites-available/example.com.conf在Ubuntu上。

注意:站点的Apache配置文件的位置和文件名可能会有所不同。

使用你选择的编辑器编辑此文件, 例如, 使用以下命令:

sudo nano /etc/apache2/sites-available/example.com.conf

滚动浏览文件, 直到找到虚拟主机命令块, 如下所示:

<VirtualHost *:80>
ServerName example.com
    <Directory "/var/www/example.com/html">
    AllowOverride All
    </Directory>
</VirtualHost>

将以下内容添加到虚拟主机命令块:

ProxyRequests Off
   ProxyPreserveHost On
   ProxyVia Full
   <Proxy *>
      Require all granted
   </Proxy>

   <Location /nodejs>
      ProxyPass http://127.0.0.1:8080
      ProxyPassReverse http://127.0.0.1:8080
   </Location>

确保将这些行放在任何目录命令块。例如:

<VirtualHost *:80>
ServerName example.com

   ProxyRequests Off
   ProxyPreserveHost On
   ProxyVia Full
   <Proxy *>
      Require all granted
   </Proxy>

   <Location /nodejs>
      ProxyPass http://127.0.0.1:8080
      ProxyPassReverse http://127.0.0.1:8080
   </Location>

    <Directory "/var/www/example.com/html">
    AllowOverride All
    </Directory>
</VirtualHost>

保存并退出文件, 然后重新启动Apache以使更改生效:

sudo services apache2 restart`

Apache重新启动后, 你可以通过在浏览器中查看应用程序来对其进行测试。你应该看到消息" Hello World!Node.js运行正常"。

一盏木

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: