我已经在端口 12234 上安装了 node.js、socket.io 和 express.js,效果非常好。但是现在我想在该端口(12234)上的页面上使用 php,但我不知道该怎么做。有人有解决办法吗?
对不起我的英语不好,我是荷兰人,英语不太好。
您不能在同一个端口上运行两个应用程序。最简单的做法是将 HTTP 请求代理到 PHP,在另一个端口上运行,并将其他请求代理到 Socket.IO,在另一个端口上运行。
这是一个使用http-proxy
. 请注意,这不适用于 flashsockets 和 XHR 长轮询之类的东西。
var httpProxy = require('http-proxy')
var server = httpProxy.createServer(function (req, res, proxy) {
proxy.proxyRequest(req, res, {
host: 'localhost',
port: // whatever port PHP is running on
});
})
server.on('upgrade', function (req, socket, head) {
server.proxy.proxyWebSocketRequest(req, socket, head, {
host: 'localhost',
port: // whatever port Socket.IO is running on
});
});
server.listen(80);
或者,您可以将您的 Express 路由路由到 PHP。例如,如果 PHP 在端口 8080 上运行:
app.get('/', function(req, res) {
// send a HTTP get request
http.get({hostname: 'localhost', port: 8080, path:'/', function(res2) {
// pipe the response stream
res2.pipe(res);
}).on('error', function(err) {
console.log("Got error: " + err.message);
});
});
您可以通过 nginx 让 node.js 作为上游运行。假设您使用的是 nginx 和 php5-fpm。
upstream node {
server 127.0.0.1:8080;
}
location / {
proxy_pass http://node;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
proxy_redirect off;
proxy_buffering off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
}
location ~ \.php$ {
index index.php;
root /var/www;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME /var/www/$fastcgi_script_name;
}