此时我的REST API在PHP上运行,并且在Apache2 / Nginx后面运行(实际上在Apache2上,正在进行到Nginx的迁移),但在阅读了Golang和Node.js的性能以供休息之后,我正在考虑将我的REST从PHP迁移到这种变体之一,但我遇到的问题是如何只迁移一些路由,而不是整个REST。
例如现在我有两条路线
/users
和/articles
apache正在侦听80端口,然后用PHP帮助返回响应,但是如果我想将/articles
迁移到Node.js怎么办?如果Node.js位于不同的端口,我的网络服务器将如何知道/articles
需要调用Node.js,但是/users
仍然使用PHP?
答案 0 :(得分:1)
您可以设置新的Node.js REST API以使用旧的PHP REST API,并在准备好后替换Node.js REST API中的端点。
以下是使用Hapi.js的示例(但您可以使用任何Node.js RESTful框架):
const Hapi = require('hapi');
const request = require('request');
const server = new Hapi.Server();
server.connection({ port: 81, host: 'localhost' });
server.route({
method: 'GET',
path: '/new',
handler: (req, reply) => {
reply('Hello from Node.js API');
}
});
server.route({
method: 'GET',
path: '/{endpoint}',
handler: (req, reply) => {
request.get(`http://localhost:80/${req.params.endpoint}`)
.on('response', (response) => {
reply(response);
});
}
});
server.start((err) => {
if (err) {
throw err;
}
console.log(`Server running at: ${server.info.uri}`);
});
您可以在同一台服务器上运行PHP和Node.js(使用不同的端口),但您最好在同一网络中的不同服务器上运行它们。一旦您移动了所有端点,您就不希望服务器上有PHP /等。
答案 1 :(得分:0)
从我的同事那里找到了非常好的解决方案,只需处理nginx请求并重定向到另一台服务器,如果请求uri包含的内容,如下所示:
server {
listen 127.0.0.1:80;
server_name localhost.dev;
location ~* ^/[a-zA-Z0-9]+_[a-zA-Z0-9]+_(?<image_id>[0-9]+).* {
include proxy_headers.conf;
proxy_set_header X-Secure False;
add_header X-Image-Id $image_id;
access_log off;
proxy_pass http://localhost-image-cache;
proxy_next_upstream off;
}
}
upstream localhost-image-cache {
hash $server_name$image_id consistent;
server 127.0.0.1:81 max_fails=0;
keepalive 16;
}