nginx

反向代理

由服务提供方提供的访问模式、代理方式

正向代理

由服务调用方主动采取的访问模式、代理方式

我们家里的路由器就相当于正向代理服务器(网关)

隧道式代理-nginx

访问服务需要走这里,响应信息也要走这里;

nginx负载均衡-轮询策略

单纯的轮询策略无法保持会话,因为多台机器, 他会随机轮询,导致每次的session或cookie无法使用;

keepalived

原理:主机从机公用一个虚拟IP,默认虚拟IP指定主机,设置keepalived定时检测主机是否宕机,当主机宕机时,keepalived检测到后,自动将虚拟IP指向从机,完成从机上位;

非集群环境下,使用keepalived来进行备份nginx,防止nginx宕机;

安装keepalived:

配置主机的keepalived配置文件,配置从机的keepalived配置文件,主机宕机,通过keepalived的自动检测,将从机变为主机;

global_defs {
	router_id LVS_DEVEL	# LVS_DEVEL这字段在/etc/hosts文件中看;通过它访问到主机,这个id主机从机不同
}

vrrp_script chk_http_ port {
	script "/usr/local/src/nginx_check.sh"
	interval 2   # (检测脚本执行的间隔)2s
	weight 2  #权重,如果这个脚本检测为真,服务器权重+2
}

vrrp_instance VI_1 {  # VI_1  这里主机从机要一样
	state MASTER   #state 主机MASTER 备机BACKUP
	interface ens33 //网卡名称
	virtual_router_id 111 # 主、备机的virtual_router_id必须相同
	priority 100   #主、备机取不同的优先级,主机100,备份机90,从机的优先级越高,当主机宕机,越有可能成为主机
	advert_int 1	#每隔1s发送一次心跳
	authentication {	# 校验类型:密码=123456
        auth type PASS        #  这里主机从机要一样
        auth pass 123456      #  这里主机从机要一样
    }
	virtual_ipaddress { # 虛拟ip
		192.168.18.110 // VIP 虛拟IP  #  这里主机从机要一样
	}
}

扩展:如果nginx或者其他keepalived监测的服务出了问题,而keepalived并没有检测到,那就无法自动将虚拟IP只想从机;为了防止这种情况,我们可以写一段脚本,监测主机的服务,当服务访问并不返回200时,那就执行kill命令,杀掉主机进程,那么keepalived就可以检测到主机宕机了,自动将虚拟IP指向从机了,从而完成从机上位,不过这种情况一般很少出现;

location语法

# 优先级1,精确匹配,根路径
location =/ {
    return 400;
}
 
# 优先级2,以某个字符串开头,以av开头的,优先匹配这里,区分大小写
location ^~ /av {
   root /data/av/;
}
 
# 优先级3,区分大小写的正则匹配,匹配/media*****路径
location ~ /media {
      alias /data/static/;
}
 
# 优先级4 ,不区分大小写的正则匹配,所有的****.jpg|gif|png 都走这里
location ~* .*\.(jpg|gif|png|js|css)$ {
   root  /data/av/;
}
 
# 优先7,通用匹配
location / {
    return 403;
}

nginx 代理 https 服务

背景:两台服务器A、B

A服务能通外网,B服务不能通外网,nginx安装在A服务器上,需要外网api的应用程序在B服务器上,那就在A服务器上做代理转发;

server {
        charset utf-8;
        listen 7001;
        server_name  localhost;
        client_max_body_size 1024m;
        
        proxy_store off;
        proxy_redirect off;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_http_version 1.1;
        proxy_set_header X-Real-IP $remote_addr;
        
        # https api
        location / {
            proxy_pass https://www.****.com;
        }  
    }

posted @ 2023-01-18 11:35  窃窃私语QAQ  阅读(14)  评论(0编辑  收藏  举报