2017-02-10 58 views
0

我想重定向所有不安全的http流量來保護spdy服務器。如果我要用https協議打開頁面,我得到了服務器的響應,但是當我嘗試使用http訪問它時,瀏覽器只是繼續旋轉,而我根本沒有響應。expressjs http不能與spdy

const express   = require('express') 
const https   = require('spdy') 
const http    = require('http') 
const ECT    = require('ect') 
const upload   = multer({ dest: __dirname + '../public/uploads/'}) 
const cookieParser  = require('cookie-parser') 
const bodyParser  = require('body-parser') 
const session   = require('express-session') 
const passport   = require('passport') 
const redis   = require('redis') 
const RedisStore  = require('connect-redis')(session) 
const fs    = require('fs') 
const url    = require('url') 
const expressValidator = require('express-validator') 
const compression  = require('compression') 
const _    = require('lodash') 
const env    = process.env.NODE_ENV || 'production'; // development or production => changes config and secrets settings 
const secrets   = require('./config/secrets')[env]; 
const azureconf   = require('./config/azure'); 
const app    = express() 
const ectRenderer  = ECT({ watch: true, root: __dirname + '/views', ext : '.ect', gzip: true }); 
const client   = redis.createClient() 
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ extended: true })); 
app.use(cookieParser()); 
app.use(expressValidator()); 
app.set('view engine', 'ect'); 
app.engine('ect', ectRenderer.render); 
app.use(compression()) 
app.use(express.static(__dirname + '/public', { maxAge: 2419200 })); 
app.use(session({ 
     store: new RedisStore({ 
      host:'127.0.0.1', 
      port: 6379, 
      client: client 
     }), 
    secret:'mostsecuresecretintheworld', 
    saveUninitialized: false, 
    resave: true, 
    cookie: { 
     path: '/', 
     httpOnly: false, 
     secure: true, 
     maxAge: null 
     }, 
    domain: 'mydomain.com' 
})); 
const certOptions = { key: fs.readFileSync('certs/server/my-server.key.pem'), cert: fs.readFileSync('certs/ServerCertificate.crt') }; 
var unsecureServer = http.createServer(function (req, res) { 
    res.writeHead(301, { "Location": "https://" + req.headers['host'] + req.url }); 
    res.end(); 
}) 
var secureServer = https.createServer(certOptions, app); 
secureServer.listen(443); 
unsecureServer.listen(80) 

我會很感激任何幫助,謝謝。

+0

你使用什麼瀏覽器?即Chrome刪除suppprt爲SDPY http://caniuse.com/#search=spdy – Prinzhorn

+0

https://www.npmjs.com/package/spdy – Makromat

回答

0

expressjs HTTP由於HTTP是不是SPDY不SPDY

工作。這些是完全不同的協議。

請參見:

爲支持SPDY模塊。

+0

嗯,我已經使用這個模塊。 https://www.npmjs.com/package/spdy,我得到了https://的響應,並且我在開發工具中看到了http2。 – Makromat

+0

可能我需要用http協議創建另一臺服務器嗎? – Makromat

+0

https://webapplog.com/http2-node/ – Makromat