我想在 https 而不是 http 上托管我的网站。我的前端使用 AngularJs ,后端使用 NodeJs 。我将使用https://letsencrypt.org/获取SSL证书。
我无法找到在https上运行这两个网络服务器的方法。
注意:我不想通过网址将前端与后端分开。
我希望我明白我的观点。
感谢任何帮助?
答案 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。