nginx
Nginx
关键作用
反向代理,负载均衡,动静分离
http 80 https 443
权重:就是在一个事务中的占比,就是在轮询的时候
例如 8080端口的weight=3;8080端口的weight=1; 进行反向代理的端口为80
假设对80端口进行了4次请求,那么这四请求将会有三次请求的是8080,1次是8081
他是随机分配的。然后进行轮询
架构:当在架构上碰到什么问题,你就要想到,没有什么是加一层解决不了的问题,一层不过再加一层!
配置文件中的关键配置:nginx.conf
upstream testproxys{
server 172.20.22.36:50001;
server 172.20.21.41:50001;
}
server {
listen 8887;
server_name www.ceshi.com; #可以通过域名进行请求
location / {
#后端的web服务器可以通过X-Forwarded-For获取用户真实ip
proxy_pass http://testproxys; #请求转向后端定义的均衡模块,这个配置就是upstream testproxys,直接找到location/根目录下的proxy_pass,反向代理
// 下面这四行是必配的,不然请求头可能会少一些参数
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
Location /NginxStatus {
stub_status on;
}
}
正向代理
代理客户端,他帮你请求其他的一个外部资源,访问其他服务器 类似于VPN(我不用vpn昂),服务器不知道具体是谁发送的请求
反向代理
代理服务端、让你无感知的访问更好服务,让我们更好的部署
可以在反向代理上 共享一个session
就类似于百度,对于客户来说,我们只看到了 www.baidu.com,请求的永远都是这个域名
但其实他们服务器后台、还部署了多个服务器,那个总的服务器会帮我们请求其他单个的服务器,如果我们想让请求的数据在一个服务器上多接收,可以加大那台服务器的权重,客户端不知道具体是哪台服务器提供的服务
要解决Session共享的话,我们建议还是使用redis,不建议使用nginx
他会根据你分配的权重自动帮你在这些服务器之间进行轮询
安装后
经常使用的文件:conf下面的nginx.conf 里面有个 server:监听端口
推荐cmd启动nginx。。。 可以测试访问localhost:80端口,80端口是http默认的端口,可以不写
Nginx常用命令
cd nginx包的位置
#查看是否有nginx
whereis nginx
#启动
./nginx
停止 (保证安全的前提)
./nginx -s stop
安全退出 (强制停止)
./nginx -s quit
###***********重新加载配置文件
./nginx -s reload
#查看nginx进程
ps anx|grep nginx
# 开启
service firewalld start
# 重启
service firewalld restart
# 关闭
service firewalld stop
# 查看防火墙规则
firewall-cmd --list-all
# 查询端口是否开放
firewall-cmd --query-port=8080/tcp
# 开放80端口
firewall-cmd --permanent --add-port=80/tcp
# 移除端口
firewall-cmd --permanent --remove-port=8080/tcp
#重启防火墙(修改配置后要重启防火墙)
firewall-cmd --reload
# 参数解释
1、firwall-cmd:是Linux提供的操作firewall的一个工具;
2、--permanent:表示设置为持久;
3、--add-port:标识添加的端口;
优势:
- 内存小,能力强 1MB、启动容易,几乎可以做到7*24小时不间断运行
- 可以承受50000个并发连接数的响应,tomcat可以接收500-600个
Nginx其他常用配置介绍
nginx常用配置参数upstream,主要用于均衡后端多个实例
nginx的upstream支持五种算法分配方式
1.轮询(默认rr)
每个请求按时间顺序逐一分配到后端不同的服务器,如果后端某台服务器down掉,自动剔除,待恢复自动添加上
2.weight权重
指定轮询权重,权重越高处理的请求就越多,weight和访问比率成正比,用于后端服务器性能不均的情况
2.ip hash
每个请求根据访问的ip的hash结果分配,这样每个访客固定访问同一个后端服务器,可以解决sesion的问题,一般用于登录会话
//这样是随机分配的,分配是不均的
4.fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配
5.url hash(第三方)
例如:
upstream testproxys{
server 172.20.22.36:50001 weight=1 max_fails=2 fail_timeout=30s;
server 172.20.21.41:50001 weight=1 max_fails=2 fail_timeout=30s;
}
Upstream 的fail_timeout和max_fails参数是用来判断负载均衡upstream中某个server是否失效
// max_fails=2 fail_timeout=30s
在30s与该服务连接尝试失败了两次,则认为该服务已经失效,在接下来30s内,nginx不会将请求分发给失效的服务
失效时间与响应时间无关,不会影响响应时间
查看nginx当前连接数,服务接收的请求,并发数,和状态等信息
设定查看nginx状态的地址
Location /NginxStatus {
stub_status on;
}
查看方法
直接在浏览器输入server_name/NginxStatus 即可查看//www.ceshi.com/NginxStatus
例如:
upstream testproxys{
server 172.20.22.36:50001;
server 172.20.21.41:50001;
}
server {
listen 8887;
server_name www.ceshi.com; #可以通过域名进行请求
location / {
#后端的web服务器可以通过X-Forwarded-For获取用户真实ip
proxy_pass http://testproxys; #请求转向后端定义的均衡模块,这个配置就是upstream testproxys,直接找到location/根目录下的proxy_pass,反向代理
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
Location /NginxStatus {
stub_status on;
}
}
//location日志说明
$remote_addr, $proxy_add_x_forwarded_for;记录客户端ip,
//$proxy_add_x_forwarded_for#相当于转发,获取客户端ip
$remote_user;记录客户端用户名称
补充一个动静分离
nginx分离动态请求和静态请求,nginx处理静态页面,tomcat、resin处理动态页面。
动静分离可大致分为两种:
1.纯粹把静态文件独立成单独的域名,放在独立的服务器上
2.动态和静态放在一起发布,通过nginx分离
Nginx可以做到动静分离:请求静态页面(图片)都走本地,动态页面,jsp走后端
其他需要知道的
nginx虚拟主机:就是有多少个servername,配置了多少个服务
nginx仅支持http协议,不支持tcp均衡,但可以打补丁,做到tcp,类似于upstream,就是在外面在包装一个tcp
server 里面 location的配置
// 指定默认的路径配置
location /{
// 这是指定默认的一个前端的地址,就是打包解压的位置
root /root/workspace/ruoyi-ui/dist;
// 。。。
index index.html index.htm;
}
本文来自博客园,作者:没有烦恼的猫猫,转载请注明原文链接:https://www.cnblogs.com/maomao777/p/16532427.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~