2015-01-03 23 views
10

Làm cách nào để tạo máy chủ hapihttphttps, nghe trên cả 80 và 443 với cùng một định tuyến?HAPI JS Node js tạo máy chủ https

(Tôi cần một máy chủ mà nên chạy cả trên http và https với cùng API chính xác)

+0

Bạn có thể chuyển hướng tất cả các biểu mẫu yêu cầu http đến https. – codelion

+1

var http = require ('http'), https = require ('https'), express = require ('express'), app = express(); http.createServer (app) .listen (80); https.createServer ({...}, ứng dụng) .listen (443); Tôi đã suy nghĩ một cái gì đó như thế này? Chúng tôi không thể làm điều này trong hapi? – Sathish

+1

Không, tôi đã đề xuất tại sao bạn không chuyển hướng tất cả các yêu cầu http đến https thay thế. xem https://github.com/bendrucker/hapi-require-https – codelion

Trả lời

3

@codelion đã đưa ra một câu trả lời hay, nhưng nếu bạn vẫn muốn nghe trên nhiều cổng, bạn có thể chuyển nhiều cấu hình cho kết nối.

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

Nhưng cần lưu ý một lần nữa, nó sẽ là tốt để bắt đầu mất giá các kết nối http. Google và những người khác sẽ sớm bắt đầu đánh dấu chúng là không an toàn. Ngoài ra, nó có thể là một ý tưởng tốt để thực sự xử lý SSL với nginx hoặc một cái gì đó, không phải trên chính ứng dụng nút.

+1

Về câu cuối cùng của bạn: bạn có muốn kết nối an toàn giữa máy chủ hapi và máy chủ proxy nginx không? –

6

Bạn có thể chuyển hướng tất cả các yêu cầu http đến https thay vì:

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

Check-out https://github.com/bendrucker/hapi-require-https để biết thêm chi tiết .

1

Visit Link: http://cronj.com/blog/hapi-mongoose

Đây là a sample project có thể giúp bạn với điều này.

Đối với phiên bản HAPI sớm hơn 8.x

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

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

Đối HAPI phiên bản mới

var Hapi = require('hapi'); 

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

Nó có thể không được bình thường để xử lý các yêu cầu https trực tiếp trên ứng dụng, nhưng có thể Hapi.js xử lý cả http và https trong cùng một API.

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

Tôi đã thử mã này với tên miền chính xác của mình nhưng gặp lỗi ENOENT. Bạn đã bao giờ gặp phải bất kỳ vấn đề nào xung quanh điều đó do sự cho phép hay bất cứ điều gì? – agchou

+1

Các cổng dưới 1024 có đặc quyền và cần quyền truy cập root. – Fernando

+0

có nghĩa là bạn cần chạy ứng dụng nút bằng root? Có vẻ như là một ý tưởng tồi. – Vadorequest

0

tôi đang tìm kiếm một cái gì đó như thế này và phát hiện ra https://github.com/DylanPiercey/auto-sni trong đó có một cách sử dụng ví dụ với Express, Koa, Hapi (chưa được kiểm tra)

Đó là cơ bản dựa trên giấy chứng nhận letsencrypt và máy chủ HAPI tải sử dụng một người biết lắng nghe tùy chỉnh.

Chưa thử.

Các vấn đề liên quan