如何使用hapi.js在同一服务器上支持多个网站?

马特·哈里森

假设我想将我的2个网站(cats.com和dogs.com)托管在具有单个IP地址(即虚拟主机)的同一服务器上。我想同时使用hapi.js编写它们,并使它们作为单个进程运行。

这些站点可能具有重叠的路径,例如,它们可能都具有/about页面。

我如何用hapi来实现呢?

马特·哈里森

使用hapi实现此目的的一种好方法是将您的不同站点放在单独的插件中,vhost在加载插件时使用修饰符,最好使用Glue

这是一个例子:

sites / dogs.js

exports.register = function (server, options, next) {

    // Put all your routes for the site in here

    server.route({
        method: 'GET',
        path: '/',
        handler: function (request, reply) {

            reply('Dogs homepage');
        }
    });

    next();
};

exports.register.attributes = { name: 'dogs' };

sites / cats.js

exports.register = function (server, options, next) {

    // Put all your routes for the site in here

    server.route({
        method: 'GET',
        path: '/',
        handler: function (request, reply) {

            reply('Cats homepage');
        }
    });

    next();
};

exports.register.attributes = { name: 'cats' };

index.js

const Glue = require('glue');
const Hoek = require('hoek');

const manifest = {
    connections: [{
        port: 4000,
    }],
    registrations: [
        {
            plugin: {
                register: './sites/cats'
            },
            options: {
                routes: {
                    vhost: 'cats.com'
                }
            }
        },
        {
            plugin: {
                register: './sites/dogs'
            },
            options: {
                routes: {
                    vhost: 'dogs.com'
                }
            }
        }
    ]
};

const options = {
    relativeTo: __dirname
};

Glue.compose(manifest, options, (err, server) => {

    Hoek.assert(!err, err);
    server.start((err) => {

        Hoek.assert(!err, err);
        console.log('server started');
    });
});

然后,您可以使用几个cURL命令来确认路由正常工作:

$ curl -H "Host: cats.com" localhost:4000/
Cats homepage

$ curl -H "Host: dogs.com" localhost:4000/
Dogs homepage

不过,浏览器会为您设置该主机标头,因此当您浏览至http://cats.comhttp://dogs.com时, hapi将为您提供正确的内容(前提是您的DNS配置正确)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用IP地址访问同一服务器上具有多个域的网站

使用Nginx从同一服务器上服务多个Angular应用

NGINX:使用域/路径在同一服务器上的多个节点js应用程序

使用Laravel Forge在同一服务器上的多个队列

Node.js:如何在同一服务器上运行多个不同的应用程序并优化CPU使用率?

Node.js-使用多个HTML文件连接到同一服务器,同一用户

如何在同一服务器上配置多个symfony2项目(开发环境)

如何对在同一服务器上运行的不同进程使用不同的域名

为什么我们在同一服务器上使用多个应用程序服务器实例

如何在多个irssi实例中连接到同一服务器?

davfs2:使用不同的凭据从同一服务器安装多个webDAV

如何调用位于同一服务器上的API?

如何在同一服务器环境上运行PHP和Tomcat?

如何在同一服务器上同时发出HTTP和Websocket请求?

使用NodeJS在同一服务器上的RESTful API之间的通信

REST客户端和服务器在同一服务器上时如何避免网络呼叫

使用IIS在同一站点的同一服务器上运行node.js和WebAPI

如何将不同的子域指向同一服务器上的不同应用程序?(使用node.js作为代理吗?)

我可以使用DNS名称为同一服务器上的多个不同Web应用程序创建简单地址吗?

如何在同一服务器中使用节点 js 重定向以响应 js 应用程序?

如何使用Java将FTP服务器上的文件复制到同一服务器上的目录中?

如何配置Nginx(和Stradis)以在同一服务器上正确服务两个Stradi实例?

在命令行上运行 url 而不在同一服务器上使用 curl 或 wget 内容

(如何)我可以在同一服务器和端口上运行多个Spring Boot应用程序吗?

允许Glassfish和PHP使用Apache在同一服务器上一起工作

使用jQuery Form Plugin将多个表单提交到同一服务器端脚本

使用同一服务的多个实例

如何在SQL Server 2008 Express的同一服务器上克隆SQL Server数据库?

如何在同一服务器上处理TCP / IP原始请求和HTTP请求