一、基础概念二、nginx安装、常用命令和配置文件三、常用命令四、nginx配置文件五、nginx配置反向代理六、nginx配置负载均衡六、nginx配置动静分离七、nginx配置高可用集群
一、基础概念- nginx:高性能的HTTP和反向代理服务器、支持热部署、高并发、反向代理、负载均衡、动静分离正向代理:客户端配置一个代理服务器,从而直接访问浏览器,这种方式即称为正向代理。反向代理:客户端访问代理服务器,代理服务器直接去目标服务器访问获取数据后,访问给客户端。即客户端间接访问目标服务器,这种方式称为反向代理。负载均衡:将集中访问单个服务器的请求,分发到不同的服务器上,即负载均衡。动静分离:将动态资源(如jsp/servlet)和静态资源(css、htms、js)分开部署,即为动静分离。简单架构图:
参考https://blog.csdn.net/weixin_40496191/article/details/121028500
三、常用命令- 查看版本:./nginx -v启动:./nginx关闭:./nginx -s stop重新加载:./nginx -s reload
- 查看配置文件路径: whereis nginx.conf -->/usr/local/nginx/confnginx的配置文件组成
(1)全局块:nginx运行的配置参数,如并发量worker_processes
(2)events块:nginx与用户的网络连接,如支持的连接数worker_connections
(3)http块:文件引入、MINE-TYPE定义、日志自定义、连接超时时间、单链接请求上限等
(4)server块:一个http块可以有多个server块,每个server相当于同一台虚拟主机。
- 准备一个简单的springboot项目并且部署,默认端口8081。推荐使用docker,因为不需要配置环境变量。可参考:https://blog.csdn.net/weixin_40496191/article/details/122714245简单配置反向代理,将请求80端口地址做一个转发(ip:192.168.248.10)
访问:http://192.168.248.10:80
结果:http://192.168.248.10:8081实现端口不同路径,转发不同地址
访问:http://192.168.248.10:801/test01/index/index、http://192.168.248.10:801/test02/index/index
结果:http://192.168.248.10:8081/index/index、http://192.168.248.10:8082/index/index地址匹配分析(80端口)
location /js/ { proxy_pass 192.168.248.10:8081/; } 访问:http://192.168.248.10:80/js/index 结果:http://192.168.248.10:8081/index
location /js/ { proxy_pass 192.168.248.10:8081; } 访问:http://192.168.248.10:80/js/index 结果:http://192.168.248.10:8081/js/index
location /js/ { proxy_pass 192.168.248.10:8081/js/; } 访问:http://192.168.248.10:80/js/index 结果:http://192.168.248.10:8081/js/index
location /js/ { proxy_pass 192.168.248.10:8081/js; } 访问:http://192.168.248.10:80/js/index 结果:http://192.168.248.10:8081/jsindex六、nginx配置负载均衡
- 配置
访问:http://192.168.248.10:80/index/index
结果:http://192.168.248.10:8081/index/index、http://192.168.248.10:8082/index/index轮询分配服务器策略
(1)简单轮询(默认):即轮流平均分配,某个服务宕机,则自动剔除。如上
(2)balance权重:即可以自己配置每台服务器的分配权重,即效率性能好的服务器分配的权重越高,则被访问的次数也会越多
(3)ip_hash方式:每个请求按照ip分配,即每个ip只会固定的访问一个后端服务,可以解决session问题。
(4)upstream-fair方式:按照时间响应长短的方式进行分配,响应时间越短,则分配越多。(未调通,尴尬)
(5)url_hash方式:按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器。(未调通,尴尬)
- 静态文件配置:新建文件夹mkdir /data/js,然后放入jquery.min.js,配置文件
访问:http://192.168.248.10:803/js/jquery.min.js
结果:http://192.168.248.10:803/data/js/jquery.min.js动静分离实例:正常我们会将静态资源后缀的文件统一进行转发,如下
访问:http://192.168.248.10:804/jquery.min.js
结果:http://192.168.248.10:804/data/js/jquery.min.js
ps:这种集群方式不建议话太多时间学习。因为集群有成熟的技术栈,如Nacos、Eureka、Zookeep等。
- 准备两台虚拟机:直接克隆第一台虚拟机 (192.168.248.10,192.168.248.11)两台虚拟机都安装keepalived:yum install keepalived -y。验证:rpm -q -a keepalived监测是否成功安装
修改配置: vi /etc/keepalived/keepalived.conf
主服务器:
! Configuration File for keepalived #全局定义 global_defs { notification_email { acassen@firewall.loc failover@firewall.loc sysadmin@firewall.loc } notification_email_from Alexandre.Cassen@firewall.loc smtp_server 192.168.200.1 smtp_connect_timeout 30 router_id LVS_DEVEL10 vrrp_skip_check_adv_addr vrrp_strict vrrp_garp_interval 0 vrrp_gna_interval 0 } vrrp_script check_nginx { script "/etc/keepalived/keepalived_check.sh" interval 3 #监测脚本时间间隔 weight -20 } #虚拟ip配置 vrrp_instance VI_1 { state MASTER #//主备配置为MASTER----BACKUP interface ens33 #网卡eth0 virtual_router_id 51 #主备的virtual_router_id必须相同 priority 100 #主备取不同优先级,主比备大 advert_int 1 #主服务器组播包发送间隔时间 authentication { #主备主机之间的认证表示信息 auth_type PASS auth_pass 1111 } track_script { check_nginx #监控脚本 } virtual_ipaddress { #设置虚拟ip地址信息 192.168.248.100 } } }
从服务器:
! Configuration File for keepalived #全局定义 global_defs { notification_email { acassen@firewall.loc failover@firewall.loc sysadmin@firewall.loc } notification_email_from Alexandre.Cassen@firewall.loc smtp_server 192.168.200.1 smtp_connect_timeout 30 router_id LVS_DEVEL11 vrrp_skip_check_adv_addr vrrp_strict vrrp_garp_interval 0 vrrp_gna_interval 0 } vrrp_script check_nginx { script "/etc/keepalived/keepalived_check.sh" interval 3 #监测脚本时间间隔 weight -20 } #虚拟ip配置 vrrp_instance VI_1 { state BACKUP #//主备配置为MASTER----BACKUP interface ens33 #网卡eth0 virtual_router_id 51 #主备的virtual_router_id必须相同 priority 90 #主备取不同优先级,主比备大 advert_int 1 #主服务器组播包发送间隔时间 authentication { #主备主机之间的认证表示信息 auth_type PASS auth_pass 1111 } track_script { check_nginx #监控脚本 } virtual_ipaddress { #设置虚拟ip地址信息 192.168.248.100 } } }
keepalived_check.sh脚本
#! /bin/bash # 统计nginx 进程是否存在 A=`ps -C nginx --no-header|wc -l` # 为0 表示nginx 停止来 if [ $A -eq 0 ];then # 尝试重启nginx /usr/local/nginx/sbin/nginx sleep 1 # nginx 重启失败,则keepalived自杀,进行vip转移 A=`ps -C nginx --no-header|wc -l` # 为0 表示nginx 停止来 if [ $A -eq 0 ];then # 杀死keepalived,vip转移到另一台机器 killall keepalived fi fi
- 将keepalived_check.sh脚本放入/etc/keepalived/目录下,添加权限: chmod u+x keepalived_check.sh
ps:如果是window编辑的脚本,需要处理下,否则会报错–>坏的解释器: 没有那个文件或目录
处理:sed -i 's/r$//' keepalived_check.sh(两台都要)启动nginx和keppalived:cd /usr/local/nginx/sbin --> ./nginx --> systemctl start keepalived.service(两台都要)查看主服务器:ip a。(192.168.248.10)
访问虚拟ip:http://192.168.248.100:802/index/index
停止主服务器的nginx:cd /usr/local/nginx/sbin --> ./nginx stop查看从服务器:ip a (192.168.248.11)
访问虚拟ip:http://192.168.248.100:802/index/index成功
恢复主服务器的nginx,则虚拟ip将会跳回到主服务器。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)