在SSL

时间:2017-10-10 11:10:09

标签: angularjs node.js ssl https lets-encrypt

我想在 https 而不是 http 上托管我的网站。我的前端使用 AngularJs ,后端使用 NodeJs 。我将使用https://letsencrypt.org/获取SSL证书。

我无法找到在https上运行这两个网络服务器的方法。

注意:我不想通过网址将前端与后端分开。

我希望我明白我的观点。

感谢任何帮助?

2 个答案:

答案 0 :(得分:1)

我提出了一个简单的应用程序,即angularjs和nodejs都可以在https上工作。首先,将此应用程序保存在服务器(整个文件夹)中。其次创建一个公共文件夹并将此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>

以下是角度代码将文件保存为公开文件夹中的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个文件。请将此文件保存在公开文件夹中。我不太了解这个文件。基本上我来自后端。我对此的理解是没有这个文件我们无法加载角度代码。所以这里是文件https://github.com/Syedayesha/MEAN-Stack/blob/master/public/angular.min.js的链接。

下一步服务器代码将文件另存为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文件并输入数据并检查数据是否存储在db中。实际上我正在使用xampp,所以我使用的是apache服务器。所以我将url作为localhost运行。您可以使用您的网站名称示例 https://example.com:3443/index.html来运行网址。您需要将{strong>角度代码 url中的app.js更改为https://example.com:3443/blah。希望它有所帮助。

答案 1 :(得分:0)

通常,您应将Node服务置于Apache或Nginx等反向代理之后,并使用ProxyPass(Apache)或proxy_pass(Nginx)指令将流量发送到Node服务。然后,您可以使用Certbot为您的Apache或Nginx实例配置HTTPS,并且您不需要为您的Node服务配置HTTPS(只要它在同一主机上运行)。

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