Nginx
正向代理与反向代理
反向代理:服务端将请求转发给其他应用程序,比如转给Java;
正向代理:客户端使用,比如vpn;
一句话就是:正向代理代理客户端,反向代理代理服务器;
环境
win11、VMware17 Pro、CentOS Linux release 7.9.2009 (Core),Nginx-1.24.0、静态IP:192.168.209.111、192.168.209.112、192.168.209.113、192.168.209.114;
- 查看centos版本
 
1  | cat /etc/redhat-release  | 
- 关闭防火墙:
 
1  | systemctl stop firewalld  | 
- 重启网络服务
 
1  | systemctl restart network  | 
反向代理
代理网站
1  | location / {  | 
在浏览器地址栏输入192.168.209.111,然后地址栏不变,但访问的是尚硅谷的网站;

代理网站,地址栏url发生改变
1  | location / {  | 
在浏览器地址栏输入192.168.209.111,地址栏会变成https://www.csdn.net/;相当于做了一个跳转的操作,跳转到了https://www.csdn.net/;

原因是:目标服务器做了重定向:目标服务器告诉nginx对http协议做301的https重定向,然后nginx再告诉浏览器,最后浏览器根据Location中的地址,重新加载界面;
代理网站,代理的为https
1  | location / {  | 
nginx报错:nginx: [emerg] https protocol requires SSL support in /usr/local/nginx/conf/nginx.conf:18
不支持代理https,需要证书。
ps:好像有的nginx版本可以;
负载均衡
开了四台虚拟机,分别为:192.168.209.111,192.168.209.112、192.168.209.113、192.168.209.114;一台做nginx负载均衡,三台做服务器;
轮询
轮询:负载均衡默认算法, 将请求依次分配给服务器,平均分担负载;
1  | # 111环境  | 
1  | # 112/113/114环境  | 
现象:浏览器地址栏多次刷新访问192.168.209.111;112、113、114的页面交替出现;
权重
在upstream中配置 weight=xx;权重越大的访问的越多;
1  | # 111环境  | 
1  | # 112/113/114环境  | 
现象:浏览器地址栏多次刷新访问192.168.209.111;112、113、114的页面交替出现;其中112出现的次数最多,114最少;注意并不是8次112,2次113,1次114这样的顺序来搞的,而是整体出现的概率是这样的;例如:112出现的概率为8/(8+2+1);
动静分离
思路:当用户请求时,动态请求分配到Express业务服务器,静态资源请求放在Nginx服务器中;
安装node环境
- 安装yum。yum相当于在线下载安装,yum是包管理,类似win的msi文件;
 
1  | sudo yum install epel-release  | 
- 安装nodejs
 
1  | sudo yum install nodejs  | 
- 安装npm(上面yum包里只有node);
 
1  | yum install npm  | 
- 安装pm2
 
1  | npm install pm2 -g  | 
- 检查
 
1  | node --version  | 
- pm2常用命令
 
- 启动进程/应用:
pm2 start app.js - 重命名进程/应用:
pm2 start app.js --name fsl123 - 结束进程/应用:
pm2 stop fsl123 - 结束所有进程/应用:
pm2 stop all - 删除进程/应用 :
pm2 delete fsl123 - 删除所有进程/应用:
pm2 delete all - 列出所有进程/应用:
pm2 list - 重新启动进程/应用:
pm2 restart fsl132 - 重新启动所有进程/应用:
pm2 restart all 
在win11本地进行NodeJs起本地服务
- 新建一个文件夹,然后
npm install express --save - 新建一个serve.js,键入如下代码:
 
1  | const express = require("express");  | 
新建一个
public文件夹,里面放入vue打包的代码;将本地服务上传至centos;
在对应的目录下,通过
pm2 start app.js启动express服务;此时,便可以访问express起的服务
192.168.209.111:3000;将express服务中public文件夹下的静态文件(css,js,img)删除;现在访问会报错,因为没有对应的资源;
通过nginx代理
192.168.209.111:3000;并且在html目录下,引入静态文件(css,js,img);进行如下配置代理
1  | 
  | 
- 通过nginx代理express,并且负载均衡,访问
192.168.209.111:80页面正常展示;(PS:这里如果访问exress服务192.168.209.111:3000依旧不能正常展示;) - 通过正则简化如上重复代码
 
1  | # ~* 这是一个标志,表示正则表达式匹配时不区分大小写  | 
URLRewrite
作用:能够隐藏真实的后端服务器的物理地址;比如真实的URL为
192.168.209.111/index.jsp?pageNum=2,这样看上去很长,而且传的参数也暴露了;隐藏成192.168.209.111/2.html这种的URL;
防盗链
还是用上面的项目做例子:现象为:除了没有referers或者referers为192.168.209.111的,别的referers都不能引用css/js/img,为403;
1  | # 给 css/js/img做防盗链  | 
- 在newTab页单独打开css/js/img,跳转到自定义界面;
 
1  | location ~*/(css|js|img) {  | 
- 设置防盗链图片
 
将提示图片放在html/img/cc.jpg,访问设置防盗链图片时,就返回这cc.jpg张图;
现象:原来的html页面上,不会向之前的防盗链一样图片裂开,而是展示设置的防盗链图片;
1  | location /img{  | 
高可用场景
keepalived
用户访问时,访问的是一个虚拟IP,keepalived会选定一个主服务器使用这个虚拟IP;
每台机器上的keepalived会相互通信,根据其他机器上的keepalived进程是否存在,判断服务器状态,如果默认的Master停止了,就会在剩下的Backup机器中,竞选出一台Nginx服务器作为Master;

- yum安装
 
1  | yum install keepalived  | 
- 修改keepalived配置
 
- 配置文件在
/etc/keepalived/keepalived.conf; vrrp_instance、authentication、virtual_router_id、virtual_ipaddress这几个一样的机器,才算是同一个组里。这个组才会选出一个作为Master机器;- 这里我们设置两台机器,分别下载好keepalived,然后进行配置;
 - 机器一:192.168.209.111
 
1  | ! Configuration File for keepalived  | 
- 机器二:192.168.209.100
 
1  | ! Configuration File for keepalived  | 
- 启动服务(机器一,二都要启动)
 
1  | systemctl start keepalived  | 
- 检查状态是否报错
 
1  | systemctl status keepalived  | 
- 通过命令
ip addr查看机器一的ip信息,可以看到虚拟IP; 

6.本地打开dos,ping虚拟的ip 192.168.209.200;
现象:当主机断路的时候,丢包一次,然后自动连上备用机;

- 浏览器URL访问虚拟的ip 
192.168.209.200; 
现象:正常会展示主机的nginx代理的前端文件;当主机断路的时候,展示备用机代理的前端文件;
gzip
- 启用Gzip压缩功能, 可以使网站的css、js 、xml、html 等静态资源在传输时进行压缩,经过Gzip压缩后资源可以变为原来的30%甚至更小,尽管这样会消耗一定的cpu资源,但是会节约大量的出口带宽来提高访问速度;
 - Gzip 的压缩页面需要浏览器和服务器双方都支持,实际上就是服务器端压缩,传到浏览器后解压并解析。浏览器那里不需要我们担心,因为目前的大多数浏览器都支持解析Gzip;
 - 注意:不建议压缩图片和大文件:图片如jpg、png文件本身就会有压缩,所以就算开启gzip后,压缩前和压缩后大小没有多大区别,所以开启了反而会白白的浪费CPU资源。(如果优化可以可以图片的生命周期设置长一点,让客户端来缓存);
 
常用配置
1  | gzip on; #表示开启压缩功能  |