在SSL上运行MEAN堆栈

我想通过https而不是http托pipe我的网站。 我使用AngularJs作为我的前端和NodeJs作为我的后端。 我将使用https://letsencrypt.org/获取SSL证书。

我无法find在https上运行这两个Web服务器的方法。

注意:我不想通过url分开前端和后端。

我希望我明确expression我的观点。

任何帮助表示赞赏?

我提出了一个简单的应用程序,即angularjs和nodejs都工作在https.First所有保持此应用程序在服务器(整个文件夹)。 其次创build一个公共文件夹,并将其放置在这个index.html文件中。这里是它的代码

  <!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> 

这里是angular码将文件保存为公用文件夹中的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文件。请将此文件保存在公用文件夹中。 我对这个文件了解得不多。基本上我是从后端开始的。我对此的理解是没有这个文件,我们无法加载angular码。 所以这里是文件https://github.com/Syedayesha/MEAN-Stack/blob/master/public/angular.min.js的链接&#x3002;

接下来的服务器代码将文件保存为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近期选项variables中给你的域名SSL证书。 您需要在根文件夹中具有SSL证书。 你可以从我的github下载整个项目。 这里是链接https://github.com/Syedayesha/MEAN-Stack

使用node server.js运行节点服务器并打开浏览器并inputhttps://localhost:3443/index.html 。 而已 !!! 你会得到index.html文件并input数据,并检查数据是否存储在数据库中。 其实我正在与xampp,所以我使用的Apache服务器。 所以我运行的URL为localhost。 您可以使用您的网站名称示例 https://example.com:3443/index.html来运行url。 你需要改变angular码为 app.jsurlhttps://example.com:3443/blah 。 希望能帮助到你。

通常情况下,您应该将Node服务放在一个反向代理(如Apache或Nginx)之后,并使用ProxyPass(Apache)或proxy_pass(Nginx)指令将stream量发送到您的Node服务。 然后,您可以使用Certbot为您的Apache或Nginx实例configurationHTTPS,并且无需为您的Node服务configurationHTTPS(只要它在同一主机上运行)即可。

除了更容易设置HTTPS之外,使用反向代理比直接使用Node要好,因为您可以轻松地添加额外的Node进程以更好地利用所有CPU。