2012-11-06 74 views
0

我有一個簡單的應用程序,我使用node.js運行。下面是我的server.js:Node.js和https配置

var myApp = require('./lib/myapp') 
new myApp({ 
port: 8000 
}); 

我可以在http://myserver.com:8000

訪問應用程序,我想設置它,這樣我就可以使用https://myserver.com

我已經嘗試了各種方法訪問它回答在這裏提出的問題,但我無法得到它的工作。我認爲應用程序初始化的方式是原因,但我不確定這一點。

我知道我可以把它放在Apache後面,但我想用節點來做。

如果任何人都可以修改這個server.js對我來說,這將是一個很大的幫助!

感謝

諾曼A.

+0

你有沒有看使用[節點-HTTP代理(https://github.com/nodejitsu/node-http-proxy)這個? – JohnnyHK

+0

Infact,我沒有!讓我檢查一下,看看它是否有幫助!謝謝! –

+0

使用node-http-proxy時,出現此錯誤:「發生錯誤:{」code「:」ECONNRESET「}」。 HTTP代理工作正常,https拋出這個錯誤。 –

回答

0

謝謝大家對這個問題的貢獻。我真的很感謝所有的指針!

特別提到JohnnyHK,他的建議讓我走上正軌。我能夠使用node-http-proxy解決我的問題。簡單而有效!下面是我的服務器。js看起來像現在:

var MyApp = require('./lib/app'); 
var fs = require('fs'), 
    http = require('http'), 
    https = require('https'), 
    httpProxy = require('http-proxy'); 

var options = { 
    https: { 
    key: fs.readFileSync('certs/server.key', 'utf8'), 
    cert: fs.readFileSync('certs/server.crt', 'utf8'), 
    ca: fs.readFileSync('certs/ca.crt', 'utf8') 
    }, 
    target: { 
    https: true // This could also be an Object with key and cert properties 
    } 
}; 

var app = new MyApp({ 
    port: 8080 
    }); 

var proxy = new httpProxy.HttpProxy({ 
    target: { 
    host: 'localhost', 
    port: 8080 
    } 
}); 
https.createServer(options.https, function (req, res) { 
    proxy.proxyRequest(req, res) 
}).listen(443); 

再次感謝大家!

-Noman A.

0

https建議,要通過安全層(端口443)運行它,最好的辦法是把它背後Apache或更好nginx,並讓真正的web服務器如果你想通過node.js的look here

+0

感謝您對ArtDeineka的評論。事情是,我已經看到人們使用節點本身作爲https目的,所以我想學習如何去做,或者我做錯了什麼。當然,Apache/ngnix對於這個目的非常有用。 –

+0

我用鏈接更新了我的答案 –

+0

感謝您提供鏈接,我已經看到了這一點,並嘗試了幾處發佈在那裏的解決方案。我認爲我的主要問題是將我的當前server.js的這部分放在哪裏:new myApp({port:8000});如果你可以給我指示,或樣品,這將是救命! –

0

的方式做管理的SSL證書,等等,而你的Node.js專注於應用程序的業務邏輯

是myApp的express/connect應用程序?我不喜歡你創建的new關鍵字的奇怪構造函數,我們需要查看幫助的內容。

  1. 開始用得到它的一個「priviledged」端口上運行,即改變你800080,但保留http服務器。
  2. 一旦你想通了如何用正確的權限的運行服務器,它應該是容易掉httphttps和80 443

但因爲你的客戶端將力爭達到http第一,您需要將它們重定向到您網站的https版本。如果你這樣做的「快捷方式」,你可以設置相同的應用程序,並簡單地使用HTTP和HTTPS服務器進行監聽。然後添加一箇中間件,將所有http請求重定向到https,就完成了。看看這個How to force SSL/https in Express.js

編輯:這個答案有一個更清潔的雙服務器/單應用程序設置,但不包括有關請求轉發任何東西:Listen on HTTP and HTTPS for a single express app

理想的設置出口快件/連接的應用程序對象main.js。一個單獨的runner.js只需要該應用程序並將其傳遞給兩個服務器(1 http & 1 https)並使用正確的選項。

+0

我可以通過將端口從8000更改爲80來在端口80/http上運行它。我將查看您爲快遞提供的鏈接。謝謝! –