Nginx的核心功能

1. Nginx的核心功能

1.1 nginx反向代理功能

正向代理

代理的为客户端,对于服务器不知道真实客户的信息。例如:翻墙软件

在这里插入图片描述

反向代理服务器

代理的为服务器端。对于客户来说不知道服务器的信息。例如:nginx

在这里插入图片描述

项目部署图

在这里插入图片描述

web项目部署的虚拟机和Nginx的虚拟机可以为两台服务器【也可以在同一台虚拟机上】,且网络连接要保持一致,桥接网络无法访问NAT网络

若Nginx部署在桥接网络模式的虚拟机上,web项目部署在NAT网络模式的虚拟机上,此时,通过访问桥接模式的虚拟机的ip无法访问web项目

若二者均部署在NAT网络模式的虚拟机上,就可以成功访问

因为不在同一个网段

反向代理步骤

  1. 配置Nginx

     server {
           listen 82;
           server_name localhost;
           location /{
               # 代理的服务器地址
              proxy_pass   http://192.168.111.XXX:8080;
           }
        }
    

    配置文件在/usr/nginx/conf目录下——nginx.conf文件

  2. 防火墙放行对应的端口号

    firewall-cmd --add-port=82/tcp --zone=public --permanent
    
  3. 重启防火墙

    systemctl restart firewalld
    
  4. 启动Nginx

    ./usr/nginx/sbin/nginx
    
  5. 访问时输入nginx的地址和端口

1.2 nginx的负载均衡

负载均衡(Load Balance):把请求分摊到多个操作单元上进行执行,例如Web服务、FTP服务器、企业关键应用服务器和其他关键任务服务器等,从而共同完成工作任务

web项目必须搭建集群模式

在这里插入图片描述

web服务器项目至少搭建2台以上才可以达到集群模式

运行springboot项目

在这里插入图片描述

  • 运行springboot项目
java -jar xxx.jar

注意:端口号要放行,放行后要重启防火墙

配置nginx完成负载均衡

#定义集群名称
upstream lay{
	#真实web服务器集群信息
	server ip:端口号;
	server ip:端口号;
}
server{
	listen 83;#监听的端口号
	server_name localhost;
	location /{
		proxy_pass http://lay;#集群名称
	}
}

重新加载nginx配置

/usr/nginx/sbin/nginx -s reload

测试

http://ip:端口号/资源

1.3 负载均衡的策略

  • 默认为轮询

  • 权重策略:服务器硬件配置不同时

#定义集群名称
upstream lay{
	#真实web服务器集群信息,weight的值越大权重越大,访问频率越高
	server ip:端口号 weight=权值1;
	server ip:端口号 weight=权值2;
}
server{
	listen 83;#监听的端口号
	server_name localhost;
	location /{
		proxy_pass http://lay;#集群名称
	}
}

weight的值越大权重越大,访问频率越高

  • ip_hash策略:根据访问者客户的ip固定访问对应的web服务器
#定义集群名称
upstream lay{
	#真实web服务器集群信息
	server ip:端口号;
	server ip:端口号;
	ip_hash;
}
server{
	listen 83;#监听的端口号
	server_name localhost;
	location /{
		proxy_pass http://lay;#集群名称
	}
}

ip_hash;

  • 花钱买第三方策略插件

1.4 nginx动静分离

动:动态资源【接口】

静:静态资源【css、js、image】

分离:之前我们把静态资源和动态资源全部放在web服务器下。现在把静态资源放入nginx服务器下。动态资源在web服务器下

在这里插入图片描述

步骤:

  1. 准备web项目

  2. 把静态资源放到nginx中

    放在nginx安装目录的创建的static目录中

  3. 配置nginx

    server{
    	listen 84;
    	server_name localhost;
    	location /{
    		proxy_pass http://ip:端口号;
    	}
    	#以 下面的内容 结尾
    	location ~ \.js|.css|.jpg|.png|.jpeg|.gif|.ico|.mp3|.mp4|.avi${
    	root static;#static中包含静态资源
    	}
    }
    

1.5 nginx的HA高可用的搭建

1.5.1 高可用的原理–keepalived

在这里插入图片描述

  1. nginx如果宕机,导致客户无法访问项目。解决:搭建nginx的高可用
  2. 如果nginx主节点宕机,,如果切换到从节点【自动】
  3. 客户难道要记住两个nginx服务器的ip吗?不可能。

2和3的问题,通过keepalived组件解决

1.5.2 搭建HA高可用

安装keepalived

yum install -y keepalived

默认安装在/etc/keepalived

在这里插入图片描述

修改keepalived.conf配置文件

主机点

global_defs {
	notification_email {
	  acassen@firewall.loc
	  failover@firewall.loc
	  sysadmin@firewall.loc
	}
	notification_email_from Alexandre.Cassen@firewall.loc
	# ip的地址
	smtp_ server 虚拟机的ip
	smtp_connect_timeout 30
	router_id 虚拟机ip
}
# 执行脚本
vrrp_script chk_http_port {
	script "/usr/local/src/nginx_check.sh"
	interval 2  # 每2s执行一次该脚本
	weight -20  # keepalive宕机  权重-20 优先级
}

vrrp_instance VI_1 {
	state MASTER # 角色
	interface ens33 # 网卡名
	virtual_router_id 51 # id 保证主从相同
	priority 100  # 优先级 主节点大于从节点
	advert_int 1
	authentication {
		auth type PASS
		auth pass 1111
        }
	virtual_ipaddress { 
		ip50 # 虚拟ip. 使用逗号隔开
	}
	track_script {
		 chk_http_port # 追踪nginx脚本
	}
}

从节点

global_defs {
	notification_email {
	  acassen@firewall.loc
	  failover@firewall.loc
	  sysadmin@firewall.loc
	}
	notification_email_from Alexandre.Cassen@firewall.loc
	# ip的地址
	smtp_ server 虚拟机的ip
	smtp_connect_timeout 30
	router_id 虚拟机ip
}
# 执行脚本
vrrp_script chk_http_port {
	script "/usr/local/src/nginx_check.sh"
	interval 2  # 每2s执行一次该脚本
	weight -20  # keepalive宕机  权重-20 优先级
}

vrrp_instance VI_1 {
	state MASTER # 角色
	interface ens33 # 网卡名
	virtual_router_id 51 # id 保证主从相同
	priority 100  # 优先级 主节点大于从节点
	advert_int 1
	authentication {
		auth type PASS
		auth pass 1111
        }
	virtual_ipaddress { 
		ip50 # 虚拟ip. 使用逗号隔开
	}
	track_script {
		 chk_http_port # 追踪nginx脚本
	}
}

nginx_check.sh脚本文件

该脚本文件可以放在/usr/local/src目录下

#!/bin/bash
# 检查是否开启nginx---统计nginx进程的个数
A=`ps -C nginx --no-header |wc -l`
if [ $A -eq 0 ];then
        pkill -9 keepalived
fi

详细脚本

A=`ps -C nginx --no-header |wc -l`        
if [ $A -eq 0 ];then    #如果nginx没有启动就启动nginx                        
      /app/nginx/sbin/nginx                #重启nginx
      if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then    #nginx重启失败,则停掉keepalived服务,进行VIP转移
              pkill keepalived                    
      fi
fi

在这里插入图片描述

修改权限:chmod 777 nginx_check.sh

使其成功启动

启动

nginx //nginx的启动命令
keepalived的启动命令:
systemctl start|stop keepalived

相关推荐

  1. Tomcat、Nginx功能对比

    2024-07-19 06:30:02       47 阅读
  2. nginxrewrite功能介绍

    2024-07-19 06:30:02       26 阅读
  3. nignx功能包括哪些

    2024-07-19 06:30:02       32 阅读
  4. SpringBoot程序核心功能及优点

    2024-07-19 06:30:02       37 阅读
  5. 安全运营中心(SOC)核心功能

    2024-07-19 06:30:02       30 阅读
  6. nginxlocation规则与其他功能

    2024-07-19 06:30:02       34 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-19 06:30:02       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-19 06:30:02       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-19 06:30:02       58 阅读
  4. Python语言-面向对象

    2024-07-19 06:30:02       69 阅读

热门阅读

  1. pytorch的MINST数据集示例

    2024-07-19 06:30:02       18 阅读
  2. 在Ubuntu 12.04上安装和设置Postfix的方法

    2024-07-19 06:30:02       23 阅读