lunix 集群,负载均衡,location

时间:2023-01-27 17:01:04
 
 
nginx location语法:
location支持的语法优先级:
复制代码
location匹配顺序
#  www.s14hanju.com/
1.location = / {
  我是代码1
} 精确匹配
# www.s14hanju.com/images/
2.location ^~ /images/ {
我是代码2
}  匹配常规串,不做正则检查
#  www.s14hanju.com/xxx.gif 
#www.s14hanju.com/xxx.jpg
#www.s14hanju.com/xxx.gif
#www.s14hanju.com/xxx.jpeg
3.location ~* \.(gif|jpg|jpeg) {
我是代码3
} 正则匹配
#优先级为4,  www.s14hanju.com/av/xx资源
4. location /av/ {
我是代码4
}  匹配常规字符,有正则优先正则
 
#如果你谁都没匹配到的话,默认走/,走网页根目录,优先级最低
5.location / {
我是代码5
}  所有的location都不匹配后,默认匹配
 
#location语法实战
##最低优先级5 ,谁都找不到的时候,匹配
#最低匹配度,谁都找不到匹配
www.s14hanju.com/hello
www.s14hanju.com/reg
www.s14hanju.com/login
#我的请求发给nginx的时候,nginx不做处理,直接返回给django
location / {
 uwsgi_pass http:0.0.0.0:8000;
}
 
#通过 =   精确匹配,优先级1
location =/  {
return 402;
}
#通过常规字符匹配,匹配/documents/  优先级4
location /documents/ {
return 403;
}
#匹配常规字符,且不做正则,优先级为2
location ^~ /images/ {
return 404;
}
#匹配资源请求是图片等的话,优先级为3
#如果你想请求图片资源,就直接丢给nginx去做处理
#nginx处理静态资源更为优秀
#alias 给location配置一个文件工作目录
location ~* \.(gif|jpg|jpeg|mp4)$ {
 alias    /data/static/
}
}
#动静分离的效果,动态请求直接location匹配,转发给django
#静态资源请求,解析到转发给nginx直接处理
 
#正向代理
#代理的是客户端
#反向代理
#代理的是服务端
#nginx的反向代理功能就是 proxy_pass参数
1.配置方式,准备2台机器
在机器1中,添加参数
server {
       listen 80;
    server_name  www.s14huoying.com;
    location / {
    proxy_pass http://192.168.12.38;  #请求会直接转发给node2节点,也就是http://192.168.12.38;
}
2.在两台机器上,检测access.log ,查看请求来源
710144 GB  = 710TB
1024KB    1MB
1024MB  1GB
1024GB  1TB
 
xshell的快捷用法:
找到查看 >  撰写  >撰写栏
 
 
nginx负载均衡配置
1.环境准备,准备3台服务器
192.168.12.96   nginx入口node1
192.168.12.67   康琛的应用服务器
192.168.12.38   伟华的应用服务器
2.关闭所有机器的防火墙
3.在node1节点上配置负载均衡配置(发牌人)
 1.修改配置文件nginx.conf ,写入如下配置
   #定义负载均衡池名字叫做s14django
   upstream s14django {  
    #池子中存放2个服务器,默认轮训方式调度服务器
    server 192.168.12.38:8000;
    server 192.168.12.67:8000;
      }
   #root参数定义网页的根目录,可以写在虚拟主机内,局部变量
   #如果写在server标签外,就是全局变量
   root html;
   #虚拟主机1
   server {
      listen 80;
      server_name  www.s14huoying.com;
     location / {
    
     #当请求发送到www.s14huoying.com的时候,匹配到 /  ,就执行以下代码
     proxy_pass http://s14django;
     #包含语法参数,将一个配置文件添加到当前虚拟主机生效,这个文件要手动创建
     #这个proxy_params文件创建在/opt/nginx1-12/conf底下
     include proxy_params;
  }
  }
    2.手动创建这个参数文件
 touch /opt/nginx1-12/conf/proxy_params
 写入信息
  proxy_set_header Host $http_host;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_connect_timeout 30;
  proxy_send_timeout 60;
  proxy_read_timeout 60;
  proxy_buffering on;
  proxy_buffer_size 32k;
  proxy_buffers 4 128k;
4.配置weihua的应用服务器
 1.准备一个flask代码,运行 
 pip3 install flask
 2.准备代码  myflask.py
  from flask import Flask
  app=Flask(__name__)
  @app.route('/')
  def hello():
  return "<h1>我是伟华</h1>"
  if __name__=="__main__":
  app.run(host='0.0.0.0',port=8000)
 3.启动应用服务器
 python3 myflask.py
 
5.配置chenchen的应用服务器
 1.准备一个flask代码,运行 
 pip3 install flask
 2.准备代码  myflask.py
  from flask import Flask
  app=Flask(__name__)
  @app.route('/')
  def hello():
  return "<h1>我是琛琛</h1>"
  if __name__=="__main__":
  app.run(host='0.0.0.0',port=8000)
 3.启动应用服务器
 python3 myflask.py
6.通过访问nginx负载均衡器入口,查看负载均衡 是否正常分配,默认是轮训方式
 1.访问自己的nginx负载均衡的ip地址,查看结果
 
 
 
 
 
 
 
 

nginx与location

location指令的作用是根据用户请求的URL来执行不同的应用。

location语法

lunix 集群,负载均衡,location
location    [ = | ~ | ~* | ^~ | @ ] url     {}指令      匹配标识    匹配网站路径  匹配url后的配置

= 开头表示精确匹配
^~ 开头表示uri以某个常规字符串开头,理解为匹配 url路径即可。nginx不对url做编码,因此请求为/static/20%/aa,可以被规则^~ /static/ /aa匹配到(注意是空格)。
~ 开头表示区分大小写的正则匹配
~*  开头表示不区分大小写的正则匹配
!~和!~*分别为区分大小写不匹配及不区分大小写不匹配 的正则
/ 通用匹配,任何请求都会匹配到。

lunix 集群,负载均衡,location
lunix 集群,负载均衡,location
location匹配顺序
1.location = /{} 精确匹配
2.location ^~ /images/  匹配常规串,不做正则检查
3.location ~* \.(gif|jpg|jpeg)  正则匹配
4. location /av/   匹配常规字符,有正则优先正则
5.location / {}  所有的location都不匹配后,默认匹配
lunix 集群,负载均衡,location
lunix 集群,负载均衡,location
    location / {return 401;}       

     location =/ {
return 402;
        }

        location /documents/ {
return 403;
        }

        location ^~ /images/ {
return 404;
        }

        location ~* \.(gif|jpg|jpeg)$ {
return 500;
        }
lunix 集群,负载均衡,location

Nginx代理

lunix 集群,负载均衡,location

正向代理

正向代理,也就是传说中的代理,他的工作原理就像一个跳板(VPN),简单的说:

我是一个用户,我访问不了某网站,但是我能访问一个代理服务器,这个代理服务器呢,他能访问那个我不能访问的网站,于是我先连上代理服务器,告诉他我需要那个无法访问网站的内容,代理服务器去取回来,然后返回给我。

lunix 集群,负载均衡,location

反向代理

对于客户端而言,代理服务器就像是原始服务器。

lunix 集群,负载均衡,location

lunix 集群,负载均衡,location

nginx实现负载均衡的组件

ngx_http_proxy_module    proxy代理模块,用于把请求抛给服务器节点或者upstream服务器池

实现一个简单的反向代理

机器准备,两台服务器

master  192.168.11.63  主负载slave   192.168.11.64  web1

主负载均衡节点的配置文件

lunix 集群,负载均衡,location
worker_processes  1;
error_log  logs/error.log;
pid        logs/nginx.pid;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    access_log  logs/access.log  main;
    sendfile        on;
    keepalive_timeout  65;
        upstream slave_pools{
    server 192.168.11.64:80 weight=1;
}
    server {
        listen       80;
        server_name  localhost;
        location / {
        proxy_pass  http://slave_pools;
            root   html;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}
lunix 集群,负载均衡,location

检查语法并启动nginx

[root@master 192.168.11.63 /opt/nginx1-12]$/opt/nginx1-12/sbin/nginx -t
nginx: the configuration file /opt/nginx1-12/conf/nginx.conf syntax is ok
nginx: configuration file /opt/nginx1-12/conf/nginx.conf test is successful
lunix 集群,负载均衡,location
#启动nginx[root@master 192.168.11.63 /opt/nginx1-12]$/opt/nginx1-12/sbin/nginx#检查端口[root@master 192.168.11.63 /opt/nginx1-12]$netstat -tunlp|grep nginxtcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      8921/nginx: master
lunix 集群,负载均衡,location

此时访问master的服务器192.168.11.63:80地址,已经会将请求转发给slave的80端口

除了页面效果的展示以外,还可以通过log(access.log)查看代理效果

master端日志

lunix 集群,负载均衡,location

slave端日志

lunix 集群,负载均衡,location

Keepalived高可用软件

什么是keepalived

lunix 集群,负载均衡,location
Keepalived是一个用C语言编写的路由软件。该项目的主要目标是为Linux系统和基于Linux的基础架构提供简单而强大的负载均衡和高可用性设施。
还可以作为其他服务(nginx,mysql)的高可用软件
keepalived主要通过vrrp协议实现高可用功能。vrrp叫(virtual router redundancy protocol)虚拟路由器冗余协议,目的为了解决单点故障问题,他可以保证个别节点宕机时。整个网络可以不间断的运行。 
lunix 集群,负载均衡,location

高可用故障切换原理

在keepalived工作时,主master节点会不断的向备节点发送心跳消息,告诉备节点自己还活着,当master节点故障时,就无法发送心跳消息,备节点就无法检测到来自master的心跳了,于是调用自身的接管程序,接管master节点的ip资源以及服务,当master主节点恢复时,备backup节点又会释放接管的ip资源和服务,回复到原本的备节点角色。

1.硬件环境准备

实验环境应该最好是4台虚拟机,环境有限因此用2台机器
master
slave

2.centos系统和nginx代理环境

集群概念

 

集群介绍

lunix 集群,负载均衡,location

为什么要用集群

lunix 集群,负载均衡,location

lunix 集群,负载均衡,location

lunix 集群,负载均衡,location

lunix 集群,负载均衡,location

lunix 集群,负载均衡,location

lunix 集群,负载均衡,location

负载均衡

 

lunix 集群,负载均衡,location

lunix 集群,负载均衡,location

lunix 集群,负载均衡,location

lunix 集群,负载均衡,location

nginx负载均衡实验

 

Nginx负载均衡概述

Web服务器,直接面向用户,往往要承载大量并发请求,单台服务器难以负荷,我使用多台WEB服务器组成集群,前端使用Nginx负载均衡,将请求分散的打到我们的后端服务器集群中,实现负载的分发。那么会大大提升系统的吞吐率、请求性能、高容灾

lunix 集群,负载均衡,location

Nginx要实现负载均衡需要用到proxy_pass代理模块配置

Nginx负载均衡与Nginx代理不同地方在于

Nginx代理仅代理一台服务器,而Nginx负载均衡则是将客户端请求代理转发至一组upstream虚拟服务池

Nginx可以配置代理多台服务器,当一台服务器宕机之后,仍能保持系统可用。

upstream配置

在nginx.conf > http 区域中

upstream django {
       server 10.0.0.10:8000;
       server 10.0.0.11:9000;
}

在nginx.conf > http 区域 >  server区域  > location配置中

添加proxy_pass

location / {
            root   html;
            index  index.html index.htm;
            proxy_pass http://django;
}

此时初步负载均衡已经完成,upstream默认按照轮训方式负载,每个请求按时间顺序逐一分配到后端节点。

upstream分配策略

weight 权重

upstream django {
       server 10.0.0.10:8000 weight=5;
       server 10.0.0.11:9000 weight=10;#这个节点访问比率是大于8000的
}

ip_hash

lunix 集群,负载均衡,location
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器
upstream django {    ip_hash;
       server 10.0.0.10:8000;
       server 10.0.0.11:9000;
}
lunix 集群,负载均衡,location

backup

在非backup机器繁忙或者宕机时,请求backup机器,因此机器默认压力最小

upstream django {
       server 10.0.0.10:8000 weight=5;
       server 10.0.0.11:9000;
       server node.oldboy.com:8080 backup;
}

负载均衡实验环境规划

角色            ip                    主机名
lb01        192.168.119.10        lb01
web01        192.168.119.11        web01
web02        192.168.119.12        web02

关闭防火墙

iptables -F
sed  -i 's/enforcing/disabled/' /etc/selinux/config

systemctl stop firewalld
systemctl disable firewalld

一、web01服务器配置nginx,创建index.html

lunix 集群,负载均衡,location
server {
        listen       80;
        server_name  192.168.119.11;
        location / {
        root /node;
            index  index.html index.htm;
        }
}

mkdir /nodeecho 'i am web01' > /node/index.html

#启动NGINX./sbgin/nginx
lunix 集群,负载均衡,location

二、web01服务器配置nginx,创建index.html

lunix 集群,负载均衡,location
server {
    listen       80;
    server_name  192.168.119.12;
    location / {
        root /node;
        index  index.html index.htm;
}

mkdir /nodeecho 'i am web02...' > /node/index.html#启动nginx./sbing/nginx
lunix 集群,负载均衡,location

三、配置lb01服务器的nginx负载均衡

1.检查lb01的 nginx.conf

lunix 集群,负载均衡,location
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    upstream node {
      server 192.168.119.11:80;
      server 192.168.119.12:80;
}
    server {
        listen       80;
        server_name 192.168.119.10;
        location / {
          proxy_pass http://node;
          include proxy_params;  #需要手动创建
        }
    }
}
lunix 集群,负载均衡,location

2.手动创建proxy_params文件,文件中存放代理的请求头相关参数

lunix 集群,负载均衡,location
[root@lb01 conf]# cat /opt/nginx/conf/proxy_params
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_connect_timeout 30;
proxy_send_timeout 60;
proxy_read_timeout 60;

proxy_buffering on;
proxy_buffer_size 32k;
proxy_buffers 4 128k;
lunix 集群,负载均衡,location
启动lb01负载均衡nginx服务

./sbin/nginx

四、访问lb01节点nginx,反复刷新

lunix 集群,负载均衡,location

lunix 集群,负载均衡,location

五、nginx负载均衡调度算法

lunix 集群,负载均衡,location
调度算法      概述
轮询        按时间顺序逐一分配到不同的后端服务器(默认)
weight       加权轮询,weight值越大,分配到的访问几率越高
ip_hash      每个请求按访问IP的hash结果分配,这样来自同一IP的固定访问一个后端服务器
url_hash      按照访问URL的hash结果来分配请求,是每个URL定向到同一个后端服务器
least_conn    最少链接数,那个机器链接数少就分发
lunix 集群,负载均衡,location

1.轮询(不做配置,默认轮询)

2.weight权重(优先级)

3.ip_hash配置,根据客户端ip哈希分配,不能和weight一起用

六、nginx动静分离负载均衡

lunix 集群,负载均衡,location

环境准备

系统                 服务                软件                ip地址
centos7(lb01)                负载均衡            nginx proxy        192.168.119.10
centos7(web01)                静态资源            nginx静态资源        192.168.119.11
centos7(web02)                动态资源            django            192.168.119.12

一、在web01机器上,配置静态资源,图片等

lunix 集群,负载均衡,location
cat nginx.conf

server {
        listen       80;
        server_name  192.168.119.11;
        #定义网页根目录
         root /code;
        #定义了静态资源
        index index.html;
#域名匹配,所有的png、jpg、gif请求资源,都去/root/code/images底下找
         location ~* .*\.(png|jpg|gif)$ {
                root /code/images;
        }    

#重启nginx./sbin/nginx
lunix 集群,负载均衡,location
lunix 集群,负载均衡,location
#创建目录
mkdir -p /code/images
#准备首页文件
[root@web01  /code]$cat index.html
static files...
#准备静态文件,图片
[root@web01  /code/images]$wget http://pythonav.cn/av/girlone.jpg^C
[root@web01  /code/images]$ls
girlone.jpg
lunix 集群,负载均衡,location

二、在web02配置动态请求,准备一个flask程序和静态资源转发

lunix 集群,负载均衡,location
cat  nginx.conf

#静态资源地址
upstream static {
server 192.168.119.11:80;
}#flask动态请求
upstream flask {
server 192.168.119.12:8080;
}
    server {
        listen       80;
        server_name  192.168.119.12;      #当请求到达192.168.119.12:80/时,转发给flask的8080应用
        location / {
            proxy_pass http://flask;
            include proxy_params;
        }      #当判断资源请求是 192.168.119.12/girl.jpg时候,转发请求给static地址池的服务器192.168.119.11/
        location ~ .*\.(png|jpg|gif)$ {
        proxy_pass http://static;
include proxy_params;
}
lunix 集群,负载均衡,location

准备flask应用,flask.py

lunix 集群,负载均衡,location
from flask import Flask
app=Flask(__name__)
@app.route('/')
def hello():
    return "i am flask....from nginx"
if __name__=="__main__":
    app.run(host='0.0.0.0',port=8080)
lunix 集群,负载均衡,location

后台运行flask程序

python flask-web.py &

三、在负载均衡服务器lb01上测试访问192.168.119.10

lunix 集群,负载均衡,location

lunix 集群,负载均衡,location

lunix 集群,负载均衡,location

 

lunix 集群,负载均衡,location的更多相关文章

  1. 图文解说:Nginx&plus;tomcat配置集群负载均衡

    图文解说:Nginx+tomcat配置集群负载均衡 博客分类: appserver nginxTomcatUbuntuLinux网络应用  作者:niumd Blog:http://ari.iteye ...

  2. 转】Nginx&plus;tomcat配置集群负载均衡

    原博文出自于:http://blog.csdn.net/bruce_6/article/details/38228299         感谢! 相信很多人都听过nginx,这个小巧的东西慢慢地在吞食 ...

  3. ngnix apache tomcat集群负载均衡配置

    http://w.gdu.me/wiki/Java/tomcat_cluster.html 参考: Tomcat与Apache或Nginx的集群负载均衡设置: http://huangrs.blog. ...

  4. 【nginx&plus;tomcat集群】Nginx1&period;12&period;2&plus;Tomcat7集群&plus;负载均衡&plus;Session共享

    今天想着将项目优化一下,就想的实现集群分布,在本机测试:利用nginx+tomcat实现 通过上一篇博客(http://www.cnblogs.com/qlqwjy/p/8535235.html),N ...

  5. 运维小知识之nginx---nginx配置Jboss集群负载均衡

      codyl 2016-01-26 00:53:00 浏览385 评论0 负载均衡 转自 运维小知识之nginx---nginx配置Jboss集群负载均衡-博客-云栖社区-阿里云https://yq ...

  6. Apache&plus;Tomcat &plus;mod&lowbar;proxy集群负载均衡及session

      序言: 在玩Apache+Tomcat +mod_jk集群负载均衡及session的时候发现,还有一种方式可以实现,就是网上各位大牛们说的mod_proxy反向代理. 实在弄的我的知识细胞洋洋.实 ...

  7. Apache &plus; Tomcat集群 &plus; 负载均衡

    Part I: 取经处: http://www.ramkitech.com/2012/10/tomcat-clustering-series-simple-load.html  http://blog ...

  8. &period;net core 跨平台开发 微服务架构 基于Nginx反向代理 服务集群负载均衡

    1.概述 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客 ...

  9. 【Nginx&lpar;三&rpar;】Nginx配置集群 负载均衡策略

    Nginx配置集群 负载均衡策略 一.安装环境 1.安装JDK8的环境,配置JDK8的环境变量 2.上传jar包demo-1.jar 和 demo-2.jar demo-1.jar 监听8080端口; ...

随机推荐

  1. JS代码实现的聊天框

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  2. ecshop数据表说明

    ecshop数据表说明 数据库结构说明,以及自己在后台备份不需要备份的表(红色字体是不需要备份的表)备份文件在FTP或者服务器上网站根目录下data\sqldata下 数据库采用mysql,共78张表 ...

  3. iis 部署 webapi2&period;0 访问报错解决

    本机安装的VS2013 开发环境,在IIS部署WebApi2.0时,应用程序池并没有.NET4.5的选项. 网上搜索一番得知: 1..NET 4.5本质上还是4.0,属于递增式的更新,所以对IIS 来 ...

  4. design the relations

    Computer Science An Overview _J. Glenn *shear _11th Edition A pivotal step in designing a relati ...

  5. 30天,APP创业从0到1【7&period;25上海站】

    活动概况 时间:2015年7月25日13:30-16:30 地点:太库•上海孵化器(张江金科路2889号长泰广场c座12楼) 主办:APICloud.诸葛.圣诺资讯 联合主办:微链.太库•上海孵化器 ...

  6. jquery得到iframe src属性值的方法

    这篇文章主要介绍了jquery得到iframe src属性值的方法,很简单,很实用,需要的朋友可以参考下 取得iframe src属性的的值: Html代码 <!DOCTYPE HTML> ...

  7. JS浮点数运算Bug

    JS浮点数运算Bug的解决办法(转) 37.5*5.5=206.08 (JS算出来是这样的一个结果,我四舍五入取两位小数) 我先怀疑是四舍五入的问题,就直接用JS算了一个结果为:206.0849999 ...

  8. MVC源码解析 - 进入CLR

    这一篇是转载自汤姆大叔的一篇随笔. IIS 5 的 ASP.net 请求处理过程 IIS5核心特征是:IIS是允许在一个叫InetInfo.exe的进程上的,所以无论是aspx页面还是html页面都是 ...

  9. Raid 5数据恢复原理以及raid 5数据恢复实际操作案例

    Raid 5数据恢复算法原理 要理解 raid 5数据恢复原理首先要先认识raid5,"分布式奇偶校验的独立磁盘结构"也就是我们称之为的raid 5数据恢复有一个概念需要理解,也就 ...

  10. spring boot之hello

    自己使用springboot也已经写过一段时间的代码,但是对springboot真正运行的流程还是有点模糊,今天写出自己对springboot的认识,如有不对,还请各位大佬不吝赐教,话不多说,直接上代 ...