静态内容:基本不会变动,使用 CDN分发,HTTP 缓存等
动态内容:因为请求参数而变动,用大量的源站机器承载,结合反向代理进行负载均衡
yum install nginx
yum install nodejs
ngnix -v #确定是否安装成功
ngnix #启动nginx
netstat -nlp | grep 80 #查看80 端口是否已被占用
vi /etc/nginx/nginx.conf #编辑 nginx 配置文件
在根目录下创建静态文件夹
mkdir static
cd static
touch index.html
修改ngnix配置
user root #位于配置文件开头,用root账户启动nginx
...
http {
server {
root /root/static
}
}
重启nginx
nginx -s reload
对比与nodejs的效率
curl http://127.0.0.1:3000/index.html #查看文件是否正确
下载ab压测工具
yum install httpd-tools
压测
ab -c400 -n1600 http://127.0.0.1:3000
# 并发 400,测试 1600 次
ab -c400 -n1600 http://127.0.0.1:80/index.html
配置反向代理
http{
server{
#路径匹配,路径参数用正则,匹配到/node/(\d*)路径则转发
location ~/node/(\d*){
# 反射代理服务器设置,进行处理的服务器是 3000 端口上运行的服务
proxy_pass http://127.0.0.1:3000/detail?columid=$1;
}
}
}
配置负载均衡
http{
upstream node.com{
server 127.0.0.1:3000;
server 127.0.0.1:3001;
}
server{
location ~/node/(\d*){
proxy_pass http://node.com/detail?columid=$1
}
}
}
配置缓存
http{
upstream node.com{
server 127.0.0.1:3000;
server 127.0.0.1:3001;
}
server{
location ~/node/(\d*){
proxy_pass http://node.com/detail?columid=$1
# 缓存配置,将对应页面进行缓存
proxy_cache
}
}
}
redis将内存作为存储,可以用多个nodejs同时共享一份redis存储,适合分布式nodejs
const app = new (require('koa'))
const cacheRedis = require('redis')('cache')
const backupRedis = require('redis')('backup')
app.use(async (ctx,next)=>{
// 取出redis缓存
const result = await cacheRedis(ctx.url);
if(result){
ctx.body = result;
return
}
await next();
if(ctx.status == 200){
// 将页面返回结果写入redis
// expire设置缓存时间
cacheRedis.set(ctx.url, ctx.body, {expire:20000})
backRedis.set(ctx.url, ctx.body, {expire:20000})
}
if(ctx.status != 200){
// 从备份redis取出结果进行兜底
const result = await backupRedis(ctx.url);
ctx.status = 200;
ctx.body = result;
}
})