Nginx是什么?
Nginx是一个拥有高性能HTTP和反向代理服务器,其特点是占用内存少,并发能力强。Nginx专为性能优化而开发,最重要的要求便是性能,且十分注重效率,有报告nginx能支持高达50000个并发连接数
正向代理和反向代理
正向代理:局域网中的电脑用户想要直接访问网络是不可行的,只能通过代理服务器(Server)来访问,这种代理服务就被称为正向代理。
反向代理 客户端无法感知代理,因为客户端访问网络不需要配置,只要把请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据,然后再返回到客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器IP地址。
负载均衡
负载均衡:是高可用网络基础架构的关键组件,通常用于将工作负载分布到多个服务器来提高网站、应用、数据库或其他服务的性能和可靠性。
如果没有负载均衡,客户端与服务端的操作通常是:客户端请求服务端,然后服务端去数据库查询数据,将返回的数据带给客户端:
但随着客户端越来越多,数据,访问量飞速增长,这种情况显然无法满足,我们从上图发现,客户端的请求和相应都是通过服务端的,那么我们加大服务端的量,让多个服务端分担,是不是就能解决这个问题了呢?
但此时对于客户端而言,他去访问这个地址就是固定的,才不会去管那个服务端有时间,你只要给我返回出数据就OK了,所以我们就需要一个“管理者“,将这些服务端找个老大过来,客户端直接找老大,再由老大分配谁处理谁的数据,从而减轻服务端的压力,而这个”老大“就是反向代理服务器,而端口号就是这些服务端的工号。
像这样,当有15个请求时,反向代理服务器会平均分配给服务端,也就是各处理5个,这个过程就称之为:负载均衡
Nginx内置三种负载策略
Nginx负载均衡是通过upstream模块来实现的,内置实现了三种负载策略;
配置负载均衡服务器集群:
upstream mysvr {
server 192.168.10.121:3333;
server 192.168.10.122:3333;
}
server {
....
location ~*^.+$ {
proxy_pass http://mysvr; #请求转向mysvr 定义的服务器列表
}
}
upstream:定义一个服务集群。
proxy_pass: 将匹配的请求代理转发到proxy_pass后面配置的服务上,这里因为需要配置负载均衡,所以这里http://后面必须要跟上upstream定义的服务集群。
注意:upstream定义服务集群时,配置的服务地址只能是域名+端口或者ip+端口,不能带有协议和路径,否则nginx会报nginx: [emerg] invalid host in upstream这个错误信息。
轮询 (默认weight=1)
nginx默认就是轮询其权重都默认为1,nginx将所有请求均匀的分给集群中的每台服务器
权重轮询(weight)
通过配置权重,指定轮询几率,权重和访问比率成正比,用于应用服务器性能不均的情况。如果后端服务器宕机,能自动剔除。
upstream bakend {
server 192.168.1.10 weight=1;
server 192.168.1.11 weight=2;
}
ip_hash
每个请求按访问ip的hash结果分配,会让相同的客户端 ip 请求相同的服务器。可以解决session不能跨服务器的问题。
upstream mysvr {
server 127.0.0.1:7878;
server 192.168.10.121:3333;
ip_hash;
}
负载均衡配置总结
upstream backend {
#down表示当前的服务器暂时不可用,不参与负载均衡
server www.aaa.com down;
#max_conns=100表示此服务器的最大连接数为100
server www.bbb.com:1234 max_conns=100;
#weight表示权重,权重越大,被分配到的次数就越多
server www.ccc.com weight=3;
#backup表示这是预留的备份服务器,只在其他的节点都不可用的时候才启用
server www.ddd.com backup;
#max_fails在连续超过3次失败后,30秒内不要再分发请求到此服务器,默认fail_timeout为10秒
server x.x.x.x:8080 max_fails=3 fail_timeout=30s;
}
location的匹配规则
- = 表示精确匹配。只有请求的url路径与后面的字符串完全相等时,才会命中。
- ^~ 表示如果该符号后面的字符是最佳匹配,采用该规则,不再进行后续的查找。
- ~ 表示该规则是使用正则定义的,区分大小写。
- ~* 表示该规则是使用正则定义的,不区分大小写。
nginx的匹配优先顺序按照上面的顺序进行优先匹配,而且注意的是一旦某一个匹配命中直接退出,不再进行往下的匹配,剩下的普通匹配会按照最长匹配长度优先级来匹配,就是谁匹配的越多就用谁。
当项目是在 history模式下时, vue项目在本地时运行正常,但部署到服务器中,刷新页面,出现了404错误
Vue是属于单页应用,不管我们应用有多少页面,构建物都只会产出一个index.html
,产生问题的本质是因为我们的路由是通过JS来执行视图切换的,
当我们进入到子路由时刷新页面,web容器没有相对应的页面此时会出现404
,所以我们只需要配置将任意页面都重定向到 index.html,把路由交由前端处理
,对nginx配置文件.conf修改,添加try_files $uri $uri/ /index.html;
server {
listen 80;
server_name www.xxx.com;
location / {
root html;
try_files $uri $uri/ /index.html; # vue路由模式为history
}
}
接口反向代理
# 接口反向代理
# 跨域处理 设置头部域名
# 反向代理
proxy_pass http://static_env;
# 改写路径
rewrite ^/api/(.*)$ /$1 break;
下载地址及常用命令
下载地址:<http://nginx.org/en/download.html>
建议下载稳定版本
tasklist /fi "imagename eq nginx.exe" 查看nginx的线程
taskkill /IM nginx.exe /F 命令关闭后台所有nginx线程
start nginx : 启动nginx服务
nginx -s reopen :重新打开日志文件
nginx -t 测试nginx配置文件是否正确
nginx -V 查看nginx版本
nginx -s stop 快速停用nginx
nginx -s quit 正常停止或关闭nginx
nginx -s reload 快速重启nginx