WebRtc03: Web服务器原理和Nodejs搭建
web服务器
选型
- Nodejs
- Nginx
- Apache
工作原理
Nodejs
工作原理
解析
事件处理
两个V8引擎
Nodejs环境搭建
二进制库安装
服务器是基于centos的,使用yum命令下载
yum install nodejs
yum install npm
或者直接使用官方的二进制库
wget -c https://nodejs.org/dist/v16.20.2/node-v16.20.2-linux-x64.tar.xz
tar -xvf node-v16.20.2-linux-x64.tar.xz
mv node-v16.20.2-linux-x64 nodejs
mv node /usr/local/
源码安装
下载nodejs源码:https://nodejs.org/zh-cn/download
生成Makefile
./configure --prefix=/usr/local/nodejs
make -j 4 && sudo make install
简单的http服务
- require 引入http模块
- 创建http服务
- 侦听端口
server.js
'use strict'
var http = require('http');
var app = http.createServer(function(req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello world\n');
}).listen(8080, '0.0.0.0');
以阿里云的云服务器为例,需要打开安全组的端口8080
运行服务器并用另一个端口查看是否启动服务器
node server.js
- 查看监听端口
netstat -ntpl
在浏览器上输入ip:8080,可以看到helloworld打印
启动服务的方式
前台运行
node app.js
后台运行
nohub node app.js &
使用工具运行
forever start app.js
安装forever
- 使用淘宝的npm源
npm config set registry https://registry.npmmirror.com
npm config get registry
- 必须加上-g 不然forever只在当前工作目录生效
npm install forever -g
使用forever
forever start server.js
forever stop server.js
创建https服务
为什么要使用https服务
- 个人隐私及安全原因
- https是未来的趋势
HTTPS = HTTP + TLS/SSL
基本原理
nodejs搭建HTTPS服务
- 生成HTTPS证书
- 引入HTTPS模块
- 指定证书位置,并创建HTTPS服务
'use strict'
var https = require('https');
var fs = require('fs');
var options = {
key : fs.readFileSync('keyPath'),
cert : fs.readFileSync('pemPath')
}
var app = https.createServer(options, function(req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('HTTPS: Hello world\n');
}).listen(443, '0.0.0.0');
实现一个真正的web服务器
- 引用express模块
- 引入serve-index模块
- 指定发布目录
npm install express serve-index
'use strict'
var http = require('http');
var https = require('https');
var fs = require('fs');
var express = require('express');
var serveIndex = require('serve-index');
var app = express();
app.use(serveIndex('./public'));
app.use(express.static('./public'));
// http server
var http_server = http.createServer(app);
http_server.listen(8080, '0.0.0.0');
// 这里没有证书,所以屏蔽了
// var options = {
// key : fs.readFileSync('keyPath'),
// cert : fs.readFileSync('pemPath')
// }
// var https_server = https.createServer(options, app).listen(443, '0.0.0.0');