如果你有类似 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;
}
我宁愿使用不同的子域,而不是使用路由代理到节点,但这取决于你。