Express Nodejs Http Https Forwarding仅在第二次请求后发生

时间:2018-01-26 20:45:36

标签: javascript node.js express deployment web-deployment

我已经尝试了一段时间来解决这个问题,似乎无法使其发挥作用。我有一个仅适用于https的网站,我希望通过http访问域的所有请求都转发到网站的https版本。这是我的快速服务器文件的片段(当我在生产中运行它时,我传入-p标志,所以在这种情况下它将进入第一个if语句):

const app = express();

app.use(express.static('../client'));
app.get('/', function (req, res) {
    res.sendFile(__dirname + '../client/index.html');
});

if (process.argv.indexOf("-p") != -1) {

    http.createServer((req, res) => {
        res.writeHead(301, { Location: `https://gameof.ninja` })
        res.end()
    }).listen(80);

    const options = {
        key: fs.readFileSync('/etc/letsencrypt/live/gameof.ninja/privkey.pem'),
        cert: fs.readFileSync('/etc/letsencrypt/live/gameof.ninja/fullchain.pem')
    };

    server = https.createServer(options, (req, res) => {
        res.writeHead(200)
        res.end('Works!')
    }).listen(443);

    wss = new WebSocket.Server({server: server});
    console.log('listening prod.')

} else {

    server = http.createServer(app).listen(8889);
    wss = new WebSocket.Server({server: server});
    console.log('listening dev.')
} 

我的webapp的域名是“gameof.ninja”,但现在的问题是,当我最初转到“http://gameof.ninja”时,它不会自动转发到https版本。相反,它只是超时而且什么都不做。奇怪的是,我第二次尝试请求网站的http版本时,它确实正确地转发到“https://gameof.ninja”。我也尝试使用库“express-force-ssl”和“express-http-to-https”,但没有成功。当我第一次在地址栏中输入http版本时,请帮我立即转发到https。谢谢!

0 个答案:

没有答案