lunix 集群,负载均衡,location
nginx location语法:
location匹配顺序
1.location = / {
我是代码1
} 精确匹配
2.location ^~ /images/ {
我是代码2
} 匹配常规串,不做正则检查
#www.s14hanju.com/xxx.jpg
#www.s14hanju.com/xxx.gif
#www.s14hanju.com/xxx.jpeg
我是代码3
} 正则匹配
4. location /av/ {
我是代码4
} 匹配常规字符,有正则优先正则
我是代码5
} 所有的location都不匹配后,默认匹配
www.s14hanju.com/reg
www.s14hanju.com/login
#我的请求发给nginx的时候,nginx不做处理,直接返回给django
location / {
uwsgi_pass http:0.0.0.0:8000;
}
location =/ {
return 402;
}
#通过常规字符匹配,匹配/documents/ 优先级4
location /documents/ {
return 403;
}
#匹配常规字符,且不做正则,优先级为2
location ^~ /images/ {
return 404;
}
#匹配资源请求是图片等的话,优先级为3
#nginx处理静态资源更为优秀
location ~* \.(gif|jpg|jpeg|mp4)$ {
alias /data/static/
}
}
#静态资源请求,解析到转发给nginx直接处理
#代理的是客户端
#代理的是服务端
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;
}
xshell的快捷用法:
找到查看 > 撰写 >撰写栏
nginx负载均衡配置
1.环境准备,准备3台服务器
192.168.12.96 nginx入口node1
192.168.12.67 康琛的应用服务器
192.168.12.38 伟华的应用服务器
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_send_timeout 60;
proxy_read_timeout 60;
proxy_buffer_size 32k;
proxy_buffers 4 128k;
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
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
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的更多相关文章
- 图文解说:Nginx+tomcat配置集群负载均衡
图文解说:Nginx+tomcat配置集群负载均衡 博客分类: appserver nginxTomcatUbuntuLinux网络应用 作者:niumd Blog:http://ari.iteye ...
- 转】Nginx+tomcat配置集群负载均衡
原博文出自于:http://blog.csdn.net/bruce_6/article/details/38228299 感谢! 相信很多人都听过nginx,这个小巧的东西慢慢地在吞食 ...
- ngnix apache tomcat集群负载均衡配置
http://w.gdu.me/wiki/Java/tomcat_cluster.html 参考: Tomcat与Apache或Nginx的集群负载均衡设置: http://huangrs.blog. ...
- 【nginx+tomcat集群】Nginx1.12.2+Tomcat7集群+负载均衡+Session共享
今天想着将项目优化一下,就想的实现集群分布,在本机测试:利用nginx+tomcat实现 通过上一篇博客(http://www.cnblogs.com/qlqwjy/p/8535235.html),N ...
- 运维小知识之nginx---nginx配置Jboss集群负载均衡
codyl 2016-01-26 00:53:00 浏览385 评论0 负载均衡 转自 运维小知识之nginx---nginx配置Jboss集群负载均衡-博客-云栖社区-阿里云https://yq ...
- Apache+Tomcat +mod_proxy集群负载均衡及session
序言: 在玩Apache+Tomcat +mod_jk集群负载均衡及session的时候发现,还有一种方式可以实现,就是网上各位大牛们说的mod_proxy反向代理. 实在弄的我的知识细胞洋洋.实 ...
- Apache + Tomcat集群 + 负载均衡
Part I: 取经处: http://www.ramkitech.com/2012/10/tomcat-clustering-series-simple-load.html http://blog ...
- .net core 跨平台开发 微服务架构 基于Nginx反向代理 服务集群负载均衡
1.概述 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客 ...
- 【Nginx(三)】Nginx配置集群 负载均衡策略
Nginx配置集群 负载均衡策略 一.安装环境 1.安装JDK8的环境,配置JDK8的环境变量 2.上传jar包demo-1.jar 和 demo-2.jar demo-1.jar 监听8080端口; ...
随机推荐
- centos7数据库连接使用127.0.0.1报permission denied,使用localhost报No such file or directory
安装lamp环境后,测试数据库连接. 当host使用127.0.0.1时,报错:(HY000/2002): Permission denied. 把host换成localhost后,又报错:SQLST ...
- ASP.NET AJAX入门系列
ASP.NET AJAX入门系列将会写关于ASP.NET AJAX一些控件的使用方法以及基础知识,其中部分文章为原创,也有一些文章是直接翻译自官方文档,本部分内容会不断更新. 目录 ASP.NET A ...
- hadoop商业版本的选择介绍
记得刚接触到hadoop的时候跟大部分人一样都会抱怨hadoop的安装部署问题,对于一个新手来说这这的是个头疼的问题,可能需要花费一整天的时间才能把分布式环境安装配置好.在刚接触hadoop的一段时间 ...
- Linux lsattr命令详解
Linux lsattr命令 Linux lsattr命令用于显示文件属性. 用chattr执行改变文件或目录的属性,可执行lsattr指令查询其属性 用法: lsattr [-adlRvV][文件或 ...
- JSON C# Class Generator ---由json字符串生成C#实体类的工具
json作为互联网上轻量便捷的数据传输格式,越来越受到重视.但在服务器端编程过程中,我们常常希望能通过智能提示来提高编码效率.JSON C# Class Generator 能将json格式所表示的J ...
- MySQL的瑞士军刀
这里主要讲mysql运维中的一些主要工具,这些工具可能大家都用过,特别是系统管理员或者做linux服务器维护的同学可能都知道这些小工具,这里讲得会比较多一些,除了系统监控的小工具,还包括一些mysql ...
- Python正则表达式与re模块
在线正则表达式测试 http://tool.oschina.net/regex/ 常见匹配模式 模式 描述 \w 匹配字母数字及下划线 \W 匹配非字母数字下划线 \s 匹配任意空白字符,等价于 [\ ...
- CreateUserWizard控件的使用
“CreateUserWizard”控件用于收集潜在用户所提供的信息.默认情况下,“CreateUserWizard”控件会将新用户添加到 ASP.NET 成员身份系统中.有关 ASP.NET 成员资 ...
- 阿里云ECS服务器环境搭建——ubuntu16.04图形界面的安装
阿里云ECS服务器环境搭建——ubuntu16.04图形界面的安装 最近琢磨着想在服务器上搭建一个hexo博客,于是就在阿里云上买了一个云服务器ECS,远程接入后默认给的是一个命令窗口,没有图形界面, ...
- if的各种真假判断