如何托管Node.js和PHP

时间:2014-08-14 22:46:44

标签: php linux node.js redis

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

1 个答案:

答案 0 :(得分:0)

如果你有类似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;
  }

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