2017-10-10 88 views
2

我想承載我的網站https而不是http。我爲我的前端使用AngularJs,爲我的後端使用NodeJs。我將使用https://letsencrypt.org/作爲SSL證書。在SSL上運行平均值堆棧

我無法找到一種在https上運行這兩個Web服務器的方法。

注意:我不想通過網址分開前端和後端。

我希望我明確我的觀點。

任何幫助表示讚賞?

+2

AngularJS不是一個Web服務器。您的SSL配置將在Node中完成。 –

+0

Just node apis將用於角碼.SSL證書將被添加到nodejs代碼中。 –

+0

@SyedAyeshaBebe我們需要在https上運行angularjs以及nodejs,否則我們可能會遇到瀏覽器安全策略問題 –

回答

1

我提出了一個簡單的應用程序,即angularjs和nodejs都可以在https.First上工作,首先將此應用程序保存在服務器(整個文件夾)中。其次創建公共文件夾,並把這個index.html文件it.Here是它

<!DOCTYPE html> 
    <html lang="en"> 
    <head> 
    <script src="angular.min.js"></script> 
    <script src="app.js"></script> 
    </head> 
    <body ng-app="myApp"> 
    <div ng-controller="myCtrl"> 
    <form> 
     Author: 
     <input type="text" ng-model="data.author"> 
     <br> 
     <br> Title: 
     <input type="text" ng-model="data.title"> 
     <br> 
     <br> Body: 
     <input type="author" ng-model="data.body"> 
     <br> 
     <br> 
     <input type="submit" value="Submit" ng-click="submit()"> 
     </form> 
     </div> 
     </body> 
     </html> 

的代碼,這裏是角碼將文件保存爲app.js公共文件夾。

var app = angular.module('myApp', []); 
app.controller('myCtrl', function($scope,$http) { 
$scope.data = {}; 
$scope.submit= function(){ 
    console.log('clicked submit'); 
    $http({ 
     url: 'https://localhost:3443/blah', 
     method: 'POST', 
     data: $scope.data 
    }).then(function (httpResponse) { 
     console.log('response:', httpResponse); 
    }) 
    } 
}); 

你需要有angular.min.js文件.Keep這個文件中公共文件夾。我對這個文件瞭解得不多。基本上我是從後端開始的。我對此的理解是沒有這個文件,我們無法加載角碼。所以這裏是文件https://github.com/Syedayesha/MEAN-Stack/blob/master/public/angular.min.js的鏈接。

Next 服務器代碼將文件另存爲server.js。將此文件保存在根文件夾中。

var express = require('express'); 
var bodyParser = require('body-parser'); 
var mysql = require('mysql'); 
var app = express(); 
var fs=require('fs'); 
var http=require('http'); 
var https=require('https'); 
    app.use(bodyParser.json({limit: '50mb'})); 
    app.use(express.static('public')); 
var connection = mysql.createConnection({ 
    host: 'localhost', 
    user: 'root', 
    password: '', 
    database: 'testn' 
    }); 
    connection.connect(); 
var options = { 
key: fs.readFileSync('privkey.pem'), 
cert: fs.readFileSync('cert.pem') 
} 
    app.post('/blah', function(req, res, next) { 
    var cope = req.body; 
    console.log('request received:', req.body); 
    var query = connection.query('insert into form set ?', cope, function (err,  result) { 
    if (err) { 
     console.error(err); 
     return res.send(err); 
    } else { 
     return res.send('Ok'); 
    } 
    }); 
    //res.send('received the data.'); 
    }); 
    var server = http.createServer(app).listen(3000); 
var server1 = https.createServer(options,app).listen(3443); 
console.log('server running on 3443'); 

這裏我與mysqldb連接。您需要在server.js附近給出您的域名SSL證書選項變量。您需要在根文件夾中具有ssl證書。你可以從我的github下載整個項目。這裏是鏈接https://github.com/Syedayesha/MEAN-Stack

使用node server.js運行節點服務器並打開瀏覽器並輸入https://localhost:3443/index.html。而已 !!!您將獲得index.html文件並輸入數據並檢查數據是否存儲在數據庫中。其實我正在使用xampp,所以我使用的是Apache服務器。所以我運行的URL爲本地主機。您可以使用您的站點名稱運行網址示例https://example.com:3443/index.html。並且您需要更改中的角碼app.js作爲https://example.com:3443/blah。希望能幫助到你。

0

通常情況下,您應該將您的Node服務放在像Apache或Nginx這樣的反向代理之後,並使用ProxyPass(Apache)或proxy_pass(Nginx)指令將流量發送到您的Node服務。然後,您可以使用Certbot爲您的Apache或Nginx實例配置HTTPS,並且不需要爲您的Node服務配置HTTPS(只要它在同一主機上運行)即可。

除了更易於設置HTTPS之外,使用反向代理比直接使用Node更好,因爲您可以輕鬆添加其他Node進程以更好地利用所有CPU。