load balance 负载均衡
high availability 高可用
1、nginx简介
俄罗斯一位程序员开发
2、使用场景
web服务器
高并发场景
正向代理
反向代理
3、源码安装ngxin
解压:tar -zxf nginx-1.8.1.tar.gz 安装依赖:yum install gcc pcre-devel zlib-devel openssl-devel -y 配置安装路径:./configure --prefix = /opt/nginx 开始编译安装:make && make install 启动:cd /opt/nginx/sbin ./nginx ngixn加入到path中,即放到环境变量中。 常用命令: nginx -s reload | quit 安装目录: conf #配置文件 html #静态文件 sbin #可执行文件 logs #日志文件
4、负载均衡搭建
user nobody worker_processes 1; http{ upstream balance { server 127.0.0.1:7877; server 127.0.0.1:7878; server 127.0.0.1:7879; } server { listen 80; #监听端口 server_name 127.0.0.1; #监听地址 location / { proxy_pass http://balance; } } }
5、负载均衡策略
(1)轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端某台服务器宕机,故障系统被自动剔除,使用户访问不受影响;
(2)Weight增加权重
指定轮询权值,Weight值越大,分配到的访问机率越高,主要用于后端每个服务器性能不均的情况下;
upstream balance { server 127.0.0.1:7877 weight=3; server 127.0.0.1:7878 weight=2; server 127.0.0.1:7879 weight=1; }
(3)least_conn最少连接数
在连接负载最少的情况下,nginx会尽量避免将过多的请求分发给繁忙的服务器,而是将新的请求分发给不太繁忙的服务器,避免服务器过载。
upstream balance { least_conn; server 127.0.0.1:7877; server 127.0.0.1:7878; server 127.0.0.1:7879; }
(4)ip_hash
确保来自同一客户端的请求始终定向给同一台服务器,除非此服务器不可用。
每个请求按访问IP的hash结果分配,这样来自同一个IP的访客固定访问一个后端服务器,有效解决了动态网页存在的session共享问题;
upstream balance { ip_hash; server 127.0.0.1:7877; server 127.0.0.1:7878; server 127.0.0.1:7879; }
(5)fair响应时间方式,第三方插件
比上面两个更加智能的负载均衡算法。此种算法可以依据页面大小和加载时间长短智能地进行负载均衡,也就是根据后端服务器的响应时间来分配请求,响应时间短的优先分配。Nginx本身是不支持fair的,如果需要使用这种调度算法,必须下载Nginx的upstream_fair模块;
(6)url_hash依据url分配方式,第三方插件
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,可以进一步提高后端缓存服务器的效率。Nginx本身是不支持url_hash的,如果需要使用这种调度算法,必须安装Nginx 的hash软件包。
在HTTP Upstream模块中,可以通过server指令指定后端服务器的IP地址和端口,同时还可以设定每个后端服务器在负载均衡调度中的状态。常用的状态有:
http协议长连接,复用连接。
6、资源静态化
配置静态资源路径
location ^~/static/ { root html }
图床,由单个服务器统一处理图片。
7、虚拟主机
虚拟主机时指在网络服务器上分出一定的磁盘空间,用户可以租用此部分空间,以供用户放置站点及应用组件,提供必要的数据存放和传输功能。
分类:
(1)基于域名的虚拟主机,通过域名来区分虚拟主机。(域名不一样,端口一样)
http{ upstream aaa { server 192.168.0.1:8080; server 192.168.0.2:8080; server 192.168.0.3:8080; } upstream bbb { server 192.168.0.1:18080; server 192.168.0.2:18080; server 192.168.0.3:18080; } server { listen 80; #监听端口 server_name www.aaa.com; #监听地址 location / { proxy_pass http://aaa; } } server { listen 80; #监听端口 server_name www.bbb.com; #监听地址 location / { proxy_pass http://bbb; } } }
(2)基于端口的虚拟主机,通过端口来区分虚拟主机。(域名一样,端口不一样)
http{ upstream aaa { server 192.168.0.1:8080; server 192.168.0.2:8080; server 192.168.0.3:8080; } server { listen 8080; #监听端口 server_name www.aaa.com; #监听地址 location / { proxy_pass http://aaa; } } server { listen 8081; #监听端口 server_name www.aaa.com; #监听地址 location / { proxy_pass http://192.168.0.4:8080; } } }
hosts文件:c:\Windows\System32\drivers\etc\hosts 192.168.0.1 www.aaa.com 192.168.0.1 www.bbb.com 192.168.0.1 www.ccc.com
一台Linux启动多台tomcat
多个项目可以部署在同一个tomcat中,缺点是更新其中一个,需要停止所有服务。建议每个应用部署一个tomcat,方便更新。
8、Session一致性
9、配置文件详解
配置文件结构:
main(全局设置)块设置的指令将影响其它所有设置。server继承main,location继承server,upstream既不会继承其它设置,也不会被继承。
... #全局块 events { #events块 ... } http #http块 { ... #http全局块 upstream #负载均衡服务器设置 server #server块,主机设置,指定主机和端口 { ... #server全局块 location [PATTERN] #location块 URL匹配特定位置的设置 { ... } location [PATTERN] { ... } } server { ... } ... #http全局块 }
配置文件详解:
#user 指定运行nginx的用户和组(第一个参数为用户,第二个为组,这里只有用户) #user nobody #指定工作进程数(一般设置为CPU的核数) worker_processes 1; #指定错误日志为logs/ 目录下的error.log文件 #error_log logs/error.log; #指定错误日志,并指定写入格式为notice #error_log logs/error.log notice; #指定错误日志,并指定写入格式为info #error_log logs/error.log info; #指定pid文件(存放主进程pid号) #pid logs/nginx.pid; #nginx 连接配置模块 events{ accept_mutex on; #设置网路连接序列化,防止惊群现象发生,默认为on multi_accept on; #设置一个进程是否同时接受多个网络连接,默认为off #use epoll; #事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport worker_connections 1024; #指定每个工作进程最大连接数为1024,默认为512 } #http配置模块 http{ #文件扩展名与文件类型映射表。通过include家在mime.type文件,里面的types{}模块将文件扩展名映射到响应为MIME类型 include mime.types; default_type application/octet-stream; #定义响应的默认MIME类型,默认为text/plain #access_log off; #取消服务日志 #自定义存入日志的格式 log_format myFormat '$remote_addr–$remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for'; #自定义格式 access_log log/access.log myFormat; #combined为日志格式的默认值 sendfile on; #允许sendfile方式传输文件,默认为off,可以在http块,server块,location块。 sendfile_max_chunk 100k; #每个进程每次调用传输数量不能大于设定的值,默认为0,即不设上限。 #tcp_nopush on;#启用或者禁用使用套接字选项(仅在sendfile使用时使用) keepalive_timeout 65; #连接超时时间,默认为75s,可以在http,server,location块。http协议1.1之后支持长链接。 #gzip on;#启用或者禁用gzip upstream mysvr { ip_hash;#负载均衡调度算法 server 127.0.0.1:7878; server 192.168.10.121:3333 backup; #热备 } upstream ADMIN-SERVER { server nyshop:7878; } error_page 404 https://www.baidu.com; #错误页 server { keepalive_requests 120; #单连接请求上限次数。 listen 4545; #监听端口 server_name 127.0.0.1; #监听地址 location ~*^.+$ { #请求的url过滤,正则匹配,~为区分大小写,~*为不区分大小写。 #root path; #根目录 #index vv.txt; #设置默认页 proxy_pass http://mysvr; #请求转向mysvr 定义的服务器列表 deny 127.0.0.1; #拒绝的ip allow 172.18.5.54; #允许的ip } location / { root /app/admin-web/; index index.html index.htm; try_file $url $url/ /index.html; } location ~/static/ { root /app/admin-web/; index index.html index.htm; try_file $url $url/ /index.html; } #定位前端页面 location /merchant-web/ { alias /app/merchant-web/; index index.html index.htm; try_file $url $url/ /merchant-web/index.html; } #转发后端接口 location ~/admin-server/ { proxy_pass http://ADMIN-SERVER; proxy_set_header Referer $http_referer proxy_set_header Host $host:$server_port; proxy_set_header X-Real-IP $remote_addr; proxy_set_header REMOTE-HOST $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location ~/business-server/ { proxy_pass http://BUSINESS-SERVER; proxy_set_header Referer $http_referer proxy_set_header Host $host:$server_port; proxy_set_header X-Real-IP $remote_addr; proxy_set_header REMOTE-HOST $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } }
补充扩展:
MIME 类型,多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。
MIME (Multipurpose Internet Mail Extensions) 是描述消息内容类型的因特网标准。 MIME 消息能包含文本、图像、音频、视频以及其他应用程序专用的数据。 官方的 MIME 信息是由 Internet Engineering Task Force (IETF) 在下面的文档中提供的: RFC-822 Standard for ARPA Internet text messages RFC-2045 MIME Part 1: Format of Internet Message Bodies RFC-2046 MIME Part 2: Media Types RFC-2047 MIME Part 3: Header Extensions for Non-ASCII Text RFC-2048 MIME Part 4: Registration Procedures RFC-2049 MIME Part 5: Conformance Criteria and Examples 不同的应用程序支持不同的 MIME 类型。
10、路径路由规则
root 匹配域名后面的所有
alias 匹配最后
root的处理结果是:root路径+location路径
alias的处理结果是:使用alias路径替换location路径
http://t.zoukankan.com/Soy-technology-p-11355610.html
使用root,实际的路径就是:root值 + location值。 使用alias,实际的路径就是:alias值。 例如, 有一张图片,URL是:www.awaimai.com/static/a.jpg 它在服务器的路径是:/var/www/app/static/a.jpg 那么用root的配置是: location /static/ { root /var/www/app/; } 用alias的配置就是: location /static/ { alias /var/www/app/static/; } 对于alias,location值可以随便取,例如: location /hello/ { alias /var/www/app/static/; } 这样,我们访问图片的地址就是:www.awaimai.com/hello/a.jpg 注意: 很多文章说:alias 后面必须要用 “/” 结束,是错误的,亲测加不加/效果是一样的。 alias在使用正则匹配时,必须捕捉要匹配的内容,并在指定的内容处使用。 alias只能位于location块中,root可以不放在location中。
感谢阅读到现在,请在留言区提出宝贵的意见!
更多精彩内容,关注微信公众号:技术严选