之前在有道云笔记中的记录会逐个发布分享,以及我的学习过程当中的理解,欢迎交流html
原理图1:负载均衡nginx
原理图2:反向代理web
正向代理代理的对象是客户端,反向代理代理的对象是服务端算法
Nginx的环境依赖后端
Nginx安装包浏览器
2.1切换root权限缓存
zjp@zjp-virtual-machine:~$ sudo su
[sudo] password for zjp:
root@zjp-virtual-machine:/home/zjp#
复制代码
2.2进入安装包所在文件夹tomcat
-> tar zxvf openssl-1.0.0e.tar.gz 解压压缩包
-> cd openssl-1.0.0e 进入文件夹
->./config && make && make install 开始安装 或->./configure && make && make install
复制代码
-> tar zxvf nginx-1.12.1.tar.gz 解压压缩包
-> cd nginx-1.12.1 进入文件夹
->./config && make && make install 开始安装
复制代码
安装完后服务器
启动命令:./nginxmarkdown
重启命令:./nginx -s reload
启动后,打开终端:ps -aux | grep nginx,查看nginx进程
nginx主线程占用80端口。打开浏览器:http://localhost:80,显示以下,搭建成功
root权限进入/usr/local/nginx/conf/ 命令:gedit nginx.conf 用文本编辑器(或者 vi)打开文件
upstream 集群名{
server 192.168.0.155:8080;
server 192.168.0.155:9090;
}
复制代码
在server中添加:
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
proxy_pass http://集群名;
#root html;
#index index.html index.htm;
}
...
}
复制代码
修改后保存,重启Nginx
浏览器访问 http://localhost:80/+集群中项目名
进入tomcat_8080服务器
或者进入tomcat_9090服务器
随着业务不断拓展、用户量不断增多,本来一台Nginx代理的服务器已经显得吃力,不论在性能、响应速度等都显得力不从心,因此须要对后台服务器作负载均衡,缓解一台或几台服务器的高并发请求压力。
负载均衡须要使用Nginx支持的HTTP Upstream模块,该模块经过一个简单的算法调度来实现客户端ip到服务端负载均衡。Upstream目前支持4种调度算法:
在Nginx的Upstream模块中,除了能够经过server指定到特定服务器和端口,还能够设置服务器在负载均衡中的状态。目前的状态以下:
注意:当服务器的调度算法为ip_hash时,服务器在负载均衡中的状态不能是weight和backup
例子1:
upstream backend {
server A max_fails=3 fail_timeout=4s weight=9;
server B max_fails=3 fail_timeout=4s weight=9;
server C max_fails=3 fail_timeout=4s weight=9;
server D backup;
Server E backup;
}
复制代码
例子2:
upstream backend {
ip_hash;
server A max_fails=3 fail_timeout=4s;
server B max_fails=3 fail_timeout=4s;
server C max_fails=3 fail_timeout=4s;
}
复制代码
proxy_connect_timeout:与服务器链接的超时时间,默认60s
fail_timeout:当该时间内服务器没响应,则认为服务器失效,默认10s
max_fails:容许链接失败次数,默认为1
某一台服务器宕机后,等待时间 = proxy_connect_timeout + fail_timeout*max_fails
1.缓存指令: proxy_cache_path
格式:proxy_cache_path + path + levels + keys_zone + inactive + max_size
例:proxy_cache_path /usr/local/nginx/cache levels=1:2 keys_zone=webpages:30m max_size=2g;
proxy_cache
格式:proxy_cache + cache_name
指定缓存区域的名字,一个相同的区域能够在不一样的地方使用。
proxy_cache_valid
格式:proxy_cache_valid + reply_code + time;
例:proxy_cache_valid 200 10m;
nginx.conf配置示例:
events {
worker_connections 1024;
}
http {
upstream tomcatServers {
server 192.168.0.155:8080 weight=1 max_fails=2 fail_timeout=2;
server 192.168.0.155:9090 weight=1 max_fails=2 fail_timeout=2;
server 192.168.0.155:9091 backup;
}
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
proxy_cache_path /usr/local/nginx/cache levels=1:2 keys_zone=webpages:30m max_size=2g;
server {
listen 80;
server_name localhost;
add_header X-Via $server_addr;
add_header X-Cache $upstream_cache_status;
location / {
proxy_pass http://tomcatServers;
proxy_set_header X-Real-IP $remote_addr;
proxy_cache webpages;
proxy_cache_valid 200 10m;
#root html;
#index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
复制代码
新建缓存页面路径:
$ mkdir –pv /nginx/cache/webpages
$server_addr - 显示的服务器地址
$upstream_cache_status - 缓存的状态 可能的值为:MISS(未命中)、Hint(命中)、Expired(请求传递到后台)、Stale(后端获得过时的应答)、Updating(正更新,使用旧的应答)等。 那么,在这里若是缓存的状态为HINT,就说明命中了缓存,也就是调用了缓存文件。
进入缓存路径查看(使用root权限查看):
cat 命令查看文件