nginx核心

nginx反向代理

(1)proxy_pass命令

    server {
        listen 80;
        server_name localhost;
        location /{
            #proxy_pass http://39.105.193.52;       #不添加/则会拼接location后面的内容
            proxy_pass http://39.105.193.52/;       #添加/则不会拼接location后面的内容
        }
    }

    server {
        listen 80;
        server_name localhost;
        location /server{
            #proxy_pass http://39.105.193.52;       #不添加/则会拼接location后面的内容
            proxy_pass http://39.105.193.52/;       #添加/则不会拼接location后面的内容
        }
    }

#客户端访问http://localhost/server/index.html
#第一个proxy_pass  http://localhost/server/index.html
#第二个proxy_pass  http://localhost/index.html

(2)proxy_set_header命令

#被代理服务器
    server {
        listen 8080;
        server_name localhost;
        default_type text/plain;
        return 200 "$http_username";
    }
#代理服务器
    server{
        listen 8080;
        server_name localhost;
        location /{
            proxy_pass http://39.105.193.52:8080/;
            proxy_set_header username TOM;
        }
    }

(3)proxy_redirect命令

#被代理服务端[192.168.200.146]
    server {
        listen 8081;
        server_name localhost;
        if (!-f $request_filename){
            return 302 http://192.168.200.146/;
        }
    }
#代理服务端[192.168.200.133]
    server{
        listen 8081;
        server_name localhost;
        location /{
            proxy_pass http://192.168.200.146:8081/;
            proxy_redirect http://192.168.200.146 http://192.168.200.133;
        }
    }

rewrite命令

#set命令
set $username liquanle;
#if(必须有空格)命令
if ($args){
	return XXX;
	}
#break命令(在当前location中找)
break;
#rewrite命令
rewrite ^/rewrite/url\w*$ https://www.baidu.com;
rewrite ^/rewrite/(test)\w*$ /$1;
rewrite ^/rewrite/(demo)\w*$ /$1;

rewrite案例
(1)域名跳转

server{
    listen 80;
    server_name http://www.itcast.com;
    location /{
        default_type text/plain;
        return 200 "welcome";
    }
}
server{
    listen 80;
    server_name www.itcast.cn www.itheima.com;
    rewrite ^(.*) http://www.itcast.com$1;
}

(2)域名镜像------将部分模块进行映射

    server{
        listen 80;
        server_name http://www.itcast.com;
        location /{
            default_type text/plain;
            return 200 "welcome";
        }
    }
    server{
        listen 80;
        server_name www.itcast.cn www.itheima.com;
        location /user{
            rewrite ^/user(.*) http://www.itcast.com$1;
        }
        location /emp{
            default_type text/plain;
            return 200 "hello emp";
        }
    }

(3)独立域名

    server{
        listen 8081;
        server_name localhost;
        rewrite ^(.*) http://39.105.193.52:80/server1$1;
    }

    server{
        listen 8082;
        server_name localhost;
        rewrite ^(.*) http://39.105.193.52:80/server2$1;
    }

    server {
        listen       80;
        server_name  localhost;

        location /server1{
            default_type text/plain;
            return 200 "server1";
        }

        location /server2{
            default_type text/plain;
            return 200 "server2";
        }
    }

nginx负载均衡

七层(应用层)+ 四层(传输层)

#服务器----三个端口模拟三个服务器
    server {
        listen 9001;
        server_name localhost;
        default_type text/html;
        location /{
            return 200 '<h1>192.168.200.133 9001</h1>';
        }
    }

    server {
        listen 9002;
        server_name localhost;
        default_type text/html;
        location /{
            return 200 '<h1>192.168.200.133 9002</h1>';
        }
    }

    server {
        listen 9003;
        server_name localhost;
        default_type text/html;
        location /{
            return 200 '<h1>192.168.200.133 9003</h1>';
        }
    }
#代理服务器
http{
	upstream backend{ #服务器组
        server 192.168.200.133:9001;
        server 192.168.200.133:9002;
        server 192.168.200.133:9003;
    }
    server{
        listen 8080;
        server_name localhost;
        location /{
            proxy_pass http://backend;
        }
    }
}

负载均衡状态

状态概述
down当前的server暂时不参与负载均衡
backup预留的备份服务器
max_fails允许请求失败的次数
fail_timeout经过max_fails失败后,服务暂停时间
max_conns限制最大的接收连接数

(1)down----不参与负载均衡
(2)backup----当服务器标记为备份服务器,当主服务器不可用时,用来传递请求
(3)max_conns----设置代理服务器同时活动链接的最大数量,默认0,表示不限制。防止后端服务器被压垮。
(4)max_fails----设置允许请求代理服务器失败的次数
(5)fail_timeout----设置失败后服务暂停的时间

http{
	upstream backend{ #服务器组
        server 192.168.200.133:9001 down;
        server 192.168.200.133:9002 backup;
        server 192.168.200.133:9003 max_fails=3 fail_timeout=15;
        #9003服务器失败3次,15秒内不能访问
    }
    server{
        listen 8080;
        server_name localhost;
        location /{
            proxy_pass http://backend;
        }
    }
}

负载均衡策略

算法名称说明
轮询(默认)默认方式
weight权重方式
ip_hash依据IP分配方式
least_conn依据最少链接方式
url_hash依据URL分配方式
fair依据相应时间方式

(1)weight加权

http{
	upstream backend{ #服务器组
        server 192.168.200.133:9001 weight=10;
        server 192.168.200.133:9002 weight=5;
        server 192.168.200.133:9003 weight=3;
        #9003服务器失败3次,15秒内不能访问
    }
    server{
        listen 8080;
        server_name localhost;
        location /{
            proxy_pass http://backend;
        }
    }
}

(2)ip_hash----没办法保持负载均衡(可用redis解决session不共享问题)
(3)least_conn----适合请求时间长短不一致造成服务器过载的情况
(4)url_hash
(5)fair

http{
	upstream backend{ #服务器组
		ip_hash;
		#least_conn;方式(3)
		#hash &request_uri;方式(4)
		#fair;方式(5)
        server 192.168.200.133:9001 weight=10;
        server 192.168.200.133:9002 weight=5;
        server 192.168.200.133:9003 weight=3;
        #9003服务器失败3次,15秒内不能访问
    }
    server{
        listen 8080;
        server_name localhost;
        location /{
            proxy_pass http://backend;
        }
    }
}

七层负载均衡案例

(1)对特定资源实现负载均衡

http{
	upstream videobackend{ #服务器组
        server 192.168.200.133:9001;
        server 192.168.200.133:9002;
    }
    upstream filebackend{ #服务器组
        server 192.168.200.133:9003;
        server 192.168.200.133:9004;
    }
    server{
        listen 8080;
        server_name localhost;
        location /video/{
            proxy_pass http://videobackend;
        }
        location /file/{
        	proxy_pass http://filebackend;
        }
    }
}

(2)对不同域名实现负载均衡

http{
	upstream butpbackend{ #服务器组
        server 192.168.200.133:9001;
        server 192.168.200.133:9002;
    }
    upstream upcbackend{ #服务器组
        server 192.168.200.133:9003;
        server 192.168.200.133:9004;
    }
    server{
        listen 8080;
        server_name www.butp.cn;
        location /{
            proxy_pass http://butpbackend;
        }
    }
    server{
        listen 8081;
        server_name www.upc.cn;
        location /{
            proxy_pass http://upcbackend;
        }
    }
}

(3)实现带有url重写的负载均衡

http{
	upstream backend{ #服务器组
        server 192.168.200.133:9001;
        server 192.168.200.133:9002;
        server 192.168.200.133:9003;
    }
    server{
        listen 8080;
        server_name localhost;
        location /file/{
			rewriter ^(/file/.*) /server/&1 last;
		}
        location /server{
            proxy_pass http://backend;
        }
    }
}

四层负载均衡

添加stream模块支持 --with-stream
stream与http同一级别

stream {
	upstream redisbackend{
		server 192.168.200.146:6379;
		server 192.168.200.146:6378;	
	}
	upstream tomcatbackend{
		server 192.168.200.146:8080;
	}
	server{
		listen 81;
		proxy_pass redisbackend; 
	}
	server{
		listen 82;
		proxy_pass tomcatbackend; 
	}
}

nginx缓存集成

(1)设置缓存

#proxy_cache_path 路径
#levels=2:1	目录两层,2个字母/1个字母
#keys_zone=itcast:200m	名称:大小
#inactive=1d	1天未使用缓存失效
#max_size=200g	缓存大小
http{
	proxy_cache_path /usr/local/proxy_cache levels=2:1 keys_zone=itcast:200m inactive=1d max_size=200g;
	upstream backend{
		server 192.168.200.146:8080;
	}
	server{
		listen 8080;
		server_name localhost;
		location /{
			proxy_catch itcast;#缓存名称
			proxy_catch_key $scheme$proxy_host$request_uri;#设置key为访问的url
			proxy_catch_min_uses 5;#最少访问5次才缓存
			proxy_catch_valid 200 5d;#200状态码缓存5天
			proxy_catch_valid 404 30s;#404状态码缓存30秒
			proxy_catch_valid any 1m;#其他状态码缓存1分钟
			add_header nginx-cache "$upstream_cache_status";#在请求头中添加缓存是否命中
			proxy_pass http://backend/js;
		}
	}
}

keepalived

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值