2015-01-03 9 views
10

मैं हैपीhttp और https सर्वर कैसे बना सकता हूं, उसी रूटिंग के साथ 80 और 443 दोनों को सुन रहा हूं?एचएपीआई जेएस नोड जेएस https सर्वर बना रहा है

if (request.headers['x-forwarded-proto'] === 'http') { 
    return reply() 
    .redirect('https://' + request.headers.host + request.url.path) 
    .code(301); 
} 

चेक बाहर https://github.com/bendrucker/hapi-require-https अधिक जानकारी के लिए:

+0

आप http से https के सभी अनुरोध फ़ॉर्म को रीडायरेक्ट कर सकते हैं। – codelion

+1

var http = आवश्यकता ('http'), https = आवश्यकता ('https'), एक्सप्रेस = आवश्यकता ('एक्सप्रेस'), ऐप = एक्सप्रेस(); http.createServer (ऐप) .listen (80); https.createServer ({...}, ऐप) .listen (443); मैं ऐसा कुछ सोच रहा था? क्या हम इसे हैपी में करते हैं? – Sathish

+1

नहीं, मैं सुझाव दे रहा था कि आप सभी http अनुरोधों को इसके बजाय https पर रीडायरेक्ट क्यों नहीं करते हैं। https://github.com/bendrucker/hapi-require-https – codelion

उत्तर

3

@codelion एक अच्छा जवाब दिया है, लेकिन अगर आप अभी भी कई बंदरगाहों पर सुनने के लिए चाहते हैं, तो आप कनेक्शन के लिए कई कॉन्फ़िगरेशन पारित कर सकते हैं।

var server = new Hapi.Server(); 
server.connection({ port: 80, /*other opts here */}); 
server.connection({ port: 8080, /*other opts, incl. ssh */ }); 

लेकिन फिर से ध्यान दें, http कनेक्शन को कम करना शुरू करना अच्छा होगा। Google और अन्य जल्द ही उन्हें असुरक्षित चिह्नित करना शुरू कर देंगे। इसके अलावा, यह वास्तव में एसडीएल को nginx या कुछ के साथ संभालने का अच्छा विचार होगा, नोड ऐप पर नहीं।

+1

आपकी अंतिम वाक्य के बारे में: क्या आप हैपी सर्वर और nginx प्रॉक्सी सर्वर के बीच भी एक सुरक्षित कनेक्शन नहीं चाहते हैं? –

6

आप https बजाय सभी http अनुरोध अनुप्रेषित कर सकते हैं (मैं एक सर्वर जिस पर http और https दोनों में ठीक उसी एपीआई के साथ चलाना चाहिए की जरूरत है) ।

1

जाएँ लिंक: http://cronj.com/blog/hapi-mongoose

यहाँ a sample project जो आप इस के साथ मदद कर सकते हैं।

HAPI संस्करण के लिए 8.x

var server = Hapi.createServer(host, port, { 
    cors: true 
}); 

server.start(function() { 
    console.log('Server started ', server.info.uri); 
}); 

HAPI नए संस्करण

var Hapi = require('hapi'); 

var server = new Hapi.Server(); 
server.connection({ port: app.config.server.port }); 
15

के लिए की तुलना में पहले यह आवेदन पर सीधे https अनुरोधों को हैंडल करने में हमेशा की तरह नहीं हो सकता है, लेकिन Hapi.js कर सकते हैं एक ही एपीआई के भीतर http और https दोनों को संभाल लें।

var Hapi = require('hapi'); 
var server = new Hapi.Server(); 

var fs = require('fs'); 

var tls = { 
    key: fs.readFileSync('/etc/letsencrypt/live/example.com/privkey.pem'), 
    cert: fs.readFileSync('/etc/letsencrypt/live/example.com/cert.pem') 
}; 

server.connection({address: '0.0.0.0', port: 443, tls: tls }); 
server.connection({address: '0.0.0.0', port: 80 }); 

server.route({ 
    method: 'GET', 
    path: '/', 
    handler: function (request, reply) { 
     reply('Hello, world!'); 
    } 
}); 

server.start(function() { 
    console.log('Server running'); 
}); 
+0

मैंने अपने सही डोमेन नाम के साथ इस कोड को आजमाया लेकिन एक ईएनओएनटी त्रुटि मिली। क्या आपने कभी अनुमति या कुछ के कारण किसी भी मुद्दे पर भाग लिया था? – agchou

+1

1024 से कम पोर्ट्स को विशेषाधिकार प्राप्त है और रूट पहुंच की आवश्यकता है। – Fernando

+0

क्या इसका मतलब है कि आपको रूट का उपयोग करके अपना नोड ऐप चलाने की आवश्यकता है? एक बुरा विचार की तरह लगता है। – Vadorequest

0

आप HTTP प्रॉक्सी स्थानीय HTTPS को local-ssl-proxy npm package उपयोग कर सकते हैं। केवल स्थानीय विकास के लिए।

0

मैं कुछ इस तरह की तलाश में और https://github.com/DylanPiercey/auto-sni जो एक्सप्रेस, कोआ Hapi (untested)

यह मूल रूप से letsencrypt प्रमाण पत्र और लोड HAPI सर्वर एक कस्टम श्रोता के प्रयोग पर आधारित है के साथ एक उदाहरण उपयोग किया बाहर मिला था।

अभी तक यह कोशिश नहीं की है।