我有一个基于Nodejs的服务器,它使用一个中间件,它基本上将用户重定向到CAS来管理身份验证。 CAS服务器以故障单响应,最后我的Nodejs服务器使用CAS交换用户对象的故障单并将其存储在会话中。
此过程在没有群集的情况下完美无缺。
今天我想使用https://nodejs.org/api/cluster.html集群化我的Nodejs服务器(我已经做过没有任何问题的事情)。
所以不要:
let server = http.createServer(app);
server.listen(PORT, HOST, () => {
// Keep a track that the server has been launched
logger.log(`Server running at http://${HOST}:${PORT}/`);
});
如果一切正常,我现在有:
if(cluster.isMaster) {
// This is the mother process
// Let's create the threads
for(let i=0; i < NB_WORKERS; i++) {
cluster.fork();
}
// When a child crash... Restart it
cluster.on('exit', (worker, code, signal) => {
logger.log("info", "A child died (PID: %s). It was killed by code or signal %s. Restarting...", worker.process.pid, dode || signal);
cluster.fork();
});
} else {
// This is a child
// Create the server, based on http
let server = http.createServer(app);
server.listen(PORT, HOST, () => {
// Keep a track that the server has been launched
logger.log(`Server running at http://${HOST}:${PORT}/`);
});
}
当我启动服务器时,它实际上会按照预期在NB_WORKERS
个线程上启动服务器。但是当我想用我的浏览器访问我的节点服务器提供的应用程序时,我有以下错误:
如果你看不到那就说:
XMLHttpRequest cannot load https://localhost:8443/cas/login?
service=http://localhost:3000. No 'Access-Control-Allow-Origin' header is
present on the requested resource. Origin 'http://localhost:3000' is
therefore not allowed access
https://localhost:8443
是我的CAS服务器正在运行,而http://localhost:3000
是我的Node服务器正在运行的地方。
请注意,如果我将NB_WORKERS
设置为1,则一切正常。
我知道在我的CAS服务器配置中设置'Access-Control-Allow-Origin'标题可能会使一切正常,但我不明白为什么它使用一个线程而不是两个或更多。
我缺少什么?