如何与PHP一起托管Node.js


How to host Node.js along with PHP

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

如果你有像VPS这样的东西,那么你可以自由地安装任何你想要的

在node.js中运行php的典型栈是
  • Nginx作为web服务器,监听端口80
  • PHP-FPM作为fastcgi服务器,监听端口9000
  • Node应用程序运行在你想要的端口,让我们说端口3000

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

upstream php_app {
    server 127.0.0.1:9000;
}
upstream node_app {
    server 127.0.0.1:3000;
}

在vhosts中,将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;
  }

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