我在带有Node.js v4.4.3的Oracle Linux 7上运行了一个应用程序。我们的服务器在resolv.conf中定义了两个DNS服务器。我们最近主DNS服务器失败了,所以resolv.conf中定义的辅助DNS服务器应该有效。但是Node.js无法使用辅助服务器。它几乎就像是忽略了辅助设备而只是试图使用主设备。
我认为它可能是操作系统问题,所以我手动修改了resolv.conf文件并使用DIG进行了测试,并且它正确使用了辅助服务器,但是当我尝试使用Node时,它就不起作用了。我编写了下面的程序来做一些测试,基本上在程序运行时修改了resolv.conf而没有。
"use strict";
var dns = require('dns');
var express = require('express');
var bodyParser = require('body-parser');
var expressHandlebars = require('express-handlebars');
var cookieParser = require('cookie-parser');
var httpClient = require('request-promise');
//Initialize Express and Handlebars
var app = express();
app.enable('trust proxy');
app.use(cookieParser());
app.use(bodyParser.json()); // support json encoded bodies
app.use(bodyParser.urlencoded({ extended: true })); // support encoded bodies
//Configure express app settings
app.engine('handlebars', expressHandlebars({extname: '.hbs'}));
app.set('view engine', 'handlebars');
app.get('/', function(req,res){
var options = { uri : 'https://someother/internal/api', json : true };
httpClient(options)
.then(function(data){
var success = { data : data };
console.log(dns.getServers(), 'Ok!');
res.json(success);
})
.catch(function(err){
var failed = { error : err.message };
console.log(dns.getServers(),err.message);
res.status(400).json(failed);
});
});
app.listen(8080, function(){
console.log("app started");
});
任何关于为什么Node不会重新读取resolv.conf的想法,或者当它意识到第一个服务器不能正常工作时它不会使用辅助DNS服务器的任何想法都表示赞赏。
答案 0 :(得分:0)
Node.js不使用系统的DNS解析
https://nodejs.org/api/dns.html#dns_implementation_considerations