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; #表示开启压缩功能 |