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语法

location    [ = | ~ | ~* | ^~ | @ ] url     {}指令      匹配标识    匹配网站路径  匹配url后的配置

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

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

     location =/ {
return 402;
        }

        location /documents/ {
return 403;
        }

        location ^~ /images/ {
return 404;
        }

        location ~* \.(gif|jpg|jpeg)$ {
return 500;
        }

Nginx代理

正向代理

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

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

反向代理

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

nginx实现负载均衡的组件

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

实现一个简单的反向代理

机器准备,两台服务器

master  192.168.11.63  主负载slave   192.168.11.64  web1

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

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;
        }
    }
}

检查语法并启动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
#启动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

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

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

master端日志

slave端日志

Keepalived高可用软件

什么是keepalived

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

高可用故障切换原理

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

1.硬件环境准备

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

2.centos系统和nginx代理环境

集群概念

 

集群介绍

为什么要用集群

负载均衡

 

nginx负载均衡实验

 

Nginx负载均衡概述

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

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

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

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

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

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

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

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

1.检查lb01的 nginx.conf

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;  #需要手动创建
        }
    }
}

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

[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;
启动lb01负载均衡nginx服务

./sbin/nginx

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

五、nginx负载均衡调度算法

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

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

2.weight权重(优先级)

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

六、nginx动静分离负载均衡

环境准备

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

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

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
#创建目录
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

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

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;
}

准备flask应用,flask.py

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)

后台运行flask程序

python flask-web.py &

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

 

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

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

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

  2. 转】Nginx+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+tomcat集群】Nginx1.12.2+Tomcat7集群+负载均衡+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+Tomcat +mod_proxy集群负载均衡及session

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

  7. Apache + Tomcat集群 + 负载均衡

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

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

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

  9. 【Nginx(三)】Nginx配置集群 负载均衡策略

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

随机推荐

  1. python的requests快速上手、高级用法和身份认证

    https://blog.csdn.net/qq_25134989/article/details/78800209 快速上手 迫不及待了吗?本页内容为如何入门 Requests 提供了很好的指引.其 ...

  2. 静态Map类型变量赋初始值

    private static Map<String,String> sysTypeList = new HashMap<String, String>(); static { ...

  3. NET设计模式 第二部分 结构性模式(9):装饰模式(Decorator Pattern)

    装饰模式(Decorator Pattern) ——.NET设计模式系列之十 Terrylee,2006年3月 概述 在软件系统中,有时候我们会使用继承来扩展对象的功能,但是由于继承为类型引入的静态特 ...

  4. javafx 监听选择变化(TabPane)

    editTab.getSelectionModel().selectedIndexProperty().addListener(evnt); javafx2.0 监听树和表的选择变化 Swing中的组 ...

  5. NVMe标准规范

    NVMe NVM Express(NVMe),或称非易失性内存主机控制器接口规范(Non-Volatile Memory express),,是一个逻辑设备接口规范.他是与AHCI类似的.基于设备逻辑 ...

  6. RichEdit文字背景色的处理

    uses RichEdit; procedure RichEditSetBackColor( // 设置RichEdit文字背景色 mRichEdit: TRichEdit; // Rich编辑框 m ...

  7. What is LBHttpSolrServer?

    LBHttpSolrServer or "Load Balanced HttpSolrServer" is just a wrapper to CommonsHttpSolrSer ...

  8. RTMP与HLS压力测试工具安装与配置

    在CentOS 6.5环境中安装依赖软件包,使用git下载最新版本st-load源码包 [root@localhost ~]# yum install git unzip patch gcc gcc- ...

  9. NodeJs使用async让代码按顺序串行执行

    描述 由于nodejs中的函数调用都是异步执行的,而笔者在工程开发中函数A需要四五个参数,而这四五个参数值都是通过函数调用获得,因此按顺序写代码时,执行到函数A时,往往函数A需要的参数值因为参数的异步 ...

  10. [转][Java]尝试解决Java多行字符串的编辑问题

    转自:https://blog.csdn.net/jiuwuerliu/article/details/51207045 参考了:https://www.v2ex.com/amp/t/445522 除 ...