【问题标题】:How to host Node.js along with PHP如何将 Node.js 与 PHP 一起托管
【发布时间】:2014-08-15 07:17:10
【问题描述】:

我已经在 Linux 主机中托管了我的 PHP,现在我使用 node.js 进行实时推送通知,读取集成将由 reddis 完成。现在我的问题是在哪里托管 node.js 代码以及如何在 linux 托管中与我的 php 一起运行该代码?

【问题讨论】:

  • 这取决于您的托管服务提供商以及它们是否同时支持 PHP 和 Node.js,以及它们是否允许您配置初始化脚本或同时运行两个服务器。通常我在 OpenShift 或 Heroku 上托管我的 Node 项目。

标签: php linux node.js redis


【解决方案1】:

如果你有类似 VPS 的东西,那么你可以随意安装任何你想要的东西。

与 node.js 一起运行 php 的典型堆栈是

  • Nginx 作为网络服务器,监听 80 端口
  • PHP-FPM 作为 fastcgi 服务器,监听 9000 端口
  • 节点应用程序在您想要的端口上运行,比如说端口 3000

在您的 nginx html 块中,您定义一个 php 和一个节点后端

upstream php_app {
    server 127.0.0.1:9000;
}

upstream node_app {
    server 127.0.0.1:3000;
}

在您的虚拟主机中,您将 php 文件指向 fastcgi_pass 到 php 后端

location ~ \.php$ {
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    try_files $uri =404;
    include /etc/nginx/fastcgi.conf;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_pass php_app;
}

您可以将 /node 子文件夹上的请求转发到节点后端:

location /node/ {
    proxy_pass http://node_app;
    proxy_redirect off;
}

这意味着其余的请求(对于静态文件)直接由 nginx 提供服务。

有几个参数可以调整应用程序的行为,包括 php 和节点后端的超时,它们与 nginx 超时无关。另外,既然你说推送通知,我猜你正在考虑类似 websocket 服务器(如 socket.io)。在这种情况下,您还需要允许客户端从节点后端请求协议切换

location /node/ {
      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection "upgrade";
      proxy_pass http://node_app;
      proxy_redirect off;
  }

我宁愿使用不同的子域,而不是使用路由代理到节点,但这取决于你。

【讨论】:

  • 我不知道VPS,有没有其他办法?
  • VPS 是一个虚拟专用服务器。有些主机允许您成为虚拟机中的 root 用户,而在其他主机中您只是 chroot 环境中的用户。如果是第二个,那么您只需应对托管公司为您提供的任何服务。
猜你喜欢
  • 2011-03-21
  • 2019-06-07
  • 2013-09-01
  • 1970-01-01
  • 2019-08-29
  • 1970-01-01
  • 1970-01-01
  • 2010-10-18
  • 2014-04-06
相关资源
最近更新 更多