先总结nginx实现负载均衡的原理,在这之前先的知道反向代理,因为nginx的负载均衡是在反向代理的基础上实现的:

1.反向代理:通过在nginx的配置文件

(vim /opt/nginx196/conf/nginx.conf 文件位置因人而异,但conf和nginx.conf是一样的)

中的location代码块下添加一行数据:proxy_pass http://192.168.12.200;

http://192.168.12.200是真正的服务器,或者说是代理服务器所代理的服务器,不理解的话下面有详细的图介绍,依据自己的服务器地址进行修改)

使得用户在访问代理服务器时,反代理服务器再跳转到真正的目标地址(上面的http://192.168.12.200),为服务端代理的这一过程就是反向代理(为客户端代理则是正向代理)。

2.负载均衡:当访问的用户量非常大,而代理服务器所代理的目标服务器只有一台时,会导致服务器崩溃,所以的在服务端多添加几台服务器,然后由代理服务器将大量的请求分给服务端的几个服务器,而不是只分给一个服务器。这样就实现了负载均衡,下面会介绍到权重,大家可以根据自己公司后台服务器的强弱来配置权重,达到能者多劳的局面。

负载均衡的设置相当于设置了一个服务器池(qishi_upstream),然后根据权重来将请求分给不同的服务器。

配置如下:

# 在http代码块里面,添加配置

#配置负载均衡

upstream qishi_upstream {

server 192.168.12.200;

server 192.168.12.253;}

在location代码块内,添加

location / {

proxy_pass http://qishi_upstream;

}

1 nginx入门

1.1 WEB框架

django 大而全, 功能特别多 form表单 , ORM, 中间件 笨重,臃肿 600/s

flask 轻量级的,小而精, 它使用的都是第三方模块进行拼接起来的 4988/s

tornado 支持异步, 处理用户请求过来数据不用等待,类似于协程 2138/s

sanic python3.5+uvloop 33342/s



WEB服务器和web框架的关系

WEB框架: 主要是用来处理用户的请求

WEB服务器: 接收HTTP请求(例如www.pythonav.cn/xiaocang.jpg)并返回数据, web服务器不和数据库打交道

1.2 WEB服务器

nginx 开源的,支持高性能,高并发的

apache nginx他父亲

IIS(windows下面的WEB Server)

1.3 查看WEB服务器信息

使用curl -I 命令查看taobao和JD的WEB服务器

1.4 nginx的优点:

1.4.1 占有内存少,并发能力强
1.4.2 处理静态文件

静态文件与动态文件的区别

静态文件: css js jpg png mp4
动态数据: 网站会请求后端的数据库接口,获取最新的数据,这些数据就是动态数据
1.4.3 百度、京东、新浪、网易、腾讯、淘宝都在用nginx
1.4.4 一台机器只有一个80端口,假如我们想要跑多个WEB服务器呢?

2 安装nginx步骤

2.1 安装nginx需要的依赖库
yum install -y gcc patch libffi-devel python-devel zlib-devel bzip2-devel openssl openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel
2.2 下载安装nginx源码包
cd /opt
wget -c https://nginx.org/download/nginx-1.9.6.tar.gz
2.3.解压缩源码(还是在/opt目录下)
tar -zxvf nginx-1.9.6.tar.gz
2.4.释放编译文件 开启nginx状态监测功能
cd /opt/nginx-1.9.6
./configure --prefix=/opt/nginx196 --with-http_ssl_module --with-http_stub_status_module
2.5 编译安装
make && make install
2.6.启动nginx,进入sbin目录,找到nginx启动命令
cd /opt/nginx196/sbin
./nginx #启动
./nginx -s stop #关闭
./nginx -s reload # 平滑重启 ,修改了nginx.conf之后,可以不重启服务,加载新的配置
2.7 查看nginx运行状态
查看端口是否运行: netstat -tunlp
查看进程是否运行: ps -ef | grep nginx
2.8 nginx目录下的文件
conf 存放nginx所有配置文件的目录,主要nginx.conf
html 存放nginx默认站点的目录,如index.html、error.html等
logs 存放nginx默认日志的目录,如error.log access.log
sbin 存放nginx主命令的目录,sbin/nginx
2.9 nginx.conf配置文件解析

注意: 在修改配置文件之前,最好是把配置文件备份一份!!!!!

注意: 在修改配置文件之前,最好是把配置文件备份一份!!!!!

注意: 在修改配置文件之前,最好是把配置文件备份一份!!!!!

#定义nginx工作进程数
worker_processes 5;
#错误日志
#error_log logs/error.log;
#http定义代码主区域
http {
include mime.types;
default_type application/octet-stream;
#定义nginx的访问日志功能
#nginx会有一个accses.log功能,查看用户访问的记录
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;
#开启gzip压缩传输
gzip on;
#虚拟主机1 定义一个 斗鱼网站
server {
#定义nginx的访问入口端口,访问地址是 192.168.11.37:80
listen 80;
#定义网站的域名www.woshidouyu.tv
#如果没有域名,就填写服务器的ip地址 192.168.11.37
server_name www.woshidouyu.tv;
#nginx的url域名匹配
#只要请求来自于www.woshidouyu.tv/111111111
#只要请求来自于www.woshidouyu.tv/qweqwewqe
#最低级的匹配,只要来自于www.woshidouyu.tv这个域名,都会走到这个location
location / {
#这个root参数,也是关键字,定义网页的根目录
#以nginx安装的目录为相对路径 /opt/nginx112/html
#可以自由修改这个root定义的网页根目录
root html;
#index参数定义网站的首页文件名,默认的文件名
index index.html index.htm;
}
#错误页面的优化(只要是遇到前面4系列的错误,就会直接跳转到相对目录下的40x.html页面)
error_page 400 401 402 403 404 /40x.html;
}
}
2.10 nginx启动出现错误的情况

如果你在平滑重启nginx时出现以下情况的话,说明你的nginx没有启动

解决方案:

# 只需要将nginx启动起来即可
/opt/nginx196/sbin/nginx

3 nginx错误页面

3.1 配置nginx错误页面

vim /opt/nginx112/conf/nginx.conf
修改server代码块
server {
listen 80;
server_name www.qishihuya.com; location / {
root /opt/www/qishihuya;
index index.html index.htm;
}
#error_page 500 502 503 504 /50x.html;
error_page 400 402 403 404 /40x.html;
location = /40x.html {
root html;
}
} 平滑重启nginx
/opt/nginx196/sbin/nginx -s reload

4 nginx错误页面优化

打开百度或其他网站,随便输入一个不存在的链接,就可以访问到错误页面
右键点击页面空白处,查看网页源代码
拷贝源代码,粘贴到/opt/nginx112/html/40x.html下面去
再访问我们的网站,随便输入一个不存在的链接, 就可以访问到这个错误页面
http://192.168.1.40/asldfjasd

5 nginx访问日志功能

6 nginx限制网站来源IP访问



如果想要在本地访问一个域名, 可以更改本机hosts文件

用域名代替刚才的本地IP访问

windows下

c:\\windows\system32\drivers\etc\hosts

linux下

/etc/hosts

nginx状态检测功能

1 在虎牙或者其他server代码块添加以下配置
location /status {
# 开启nginx状态检测功能
stub_status on;
}

2 平滑重启nginx
/opt/nginx196/sbin/nginx -s reload

7 配置nginx多虚拟主机

7.1 效果:

(1) 访问三个不同的域名,显示三个不同的网站

(2) 三个网站互不影响

7.2 修改配置文件

   worker_processes  5;

#error_log  logs/error.log;

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;
#gzip on;
server {
listen 80;
server_name www.qishi5douyu.com; location / {
root /opt/web_server/douyu;
index index.html index.htm;
}
#error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
server {
listen 80;
server_name www.qishi5huya.com;
location /{
root /opt/web_server/huya;
index index.html;
}
}
server {
listen 80;
server_name www.qishi5zhanqi.com;
location /{
root /opt/web_server/zhanqi;
index index.html;
}
} }

7.3 在服务器上创建三个目录

cd /opt
rm -rf web_server
mkdir -p www/huya
mkdir -p www/douyu
mkdir -p www/qie
touch www/douyu/index.html
touch www/huya/index.html
touch www/qie/index.html
分别打开这三个index.html文件
vim index.html
分别添加三个直播网站的源代码内容
然后保存退出

7.4 修改本机hosts文件

c:\\windows\system32\drivers\etc\hosts

添加以下三行解析记录

192.168.1.197	www.qishi5douyu.com
192.168.1.197 www.qishi5huya.com
192.168.1.197 www.qishi5zhanqi.com

7.5 平滑重启nginx

/opt/nginx196/sbin/nginx -s reload

8 Nginx代理功能

8.1 生活中的代理有哪些

租客租房 ————> 中介(Q房网,链家, 家家顺,中原地产, 泊寓, 自如, 蛋壳, 贝壳) ————> 房东

买家 ————> 代购(微商, 服务器代理商, 等等) ————> 店铺(香港的店铺, 供应商, 老宝)

8.2 实现一个反向代理

8.2.1 实验效果:

在windows中访问代理服务器,然后让代理服务器去拿web服务器的数据

请求数据: windows ——> 192.168.12.139 ——> 192.168.12.200

返回数据: windows <—— 192.168.12.139 <—— 192.168.12.200

机器准备,两台服务器

斗鱼服务器 192.168.12.200

反向代理服务器 192.168.12.139

8.2.2 修改代理服务器192.168.12.139的配置文件
vim /opt/nginx196/conf/nginx.conf
在location代码块下添加一行数据
proxy_pass http://192.168.12.200;

8.2.3 重启代理服务器的nginx
/opt/nginx196/sbin/nginx -s reload
8.2.4 访问代理服务器的IP: 192.168.12.139
访问的结果是192.168.12.200返回的数据即可
8.2.5 分别在代理服务器和斗鱼服务器上查看日志

在代理服务器上查看

在斗鱼服务器上查看

9 Nginx负载均衡

9.1 负载均衡原理





9.2 配置负载均衡服务器

9.2.1 实验背景
有三台机器 一台为nginx代理服务器(负载均衡调度器), 另外两台为WEB服务器
192.168.12.139    # 负载均衡调度器
192.168.12.200 # WEB服务器1
192.168.12.253 # WEB服务器2
# WEB服务器3
9.2.2 完成效果

用户访问192.168.12.139,由nginx代理服务器通过负载均衡调度器分别分配到两个WEB服务器,实现负载均衡

9.2.3 准备三台机器
192.168.12.139    # 负载均衡调度器(本机)
192.168.12.200 # WEB服务器1
192.168.12.253 # WEB服务器2
9.2.4 两个WEB服务器可以正常访问
访问web服务器1返回“代噶好,我系帅帅刘 我真的是1.40这台机器”
访问web服务器2返回“MMP 我TM是文龙”
9.2.5 在nginx代理服务器(负载均衡调度器)上面做如下配置:
# 在http代码块里面,添加配置
#配置负载均衡
upstream qishi_upstream {
server 192.168.12.200;
server 192.168.12.253;
} 在location代码块内,添加
location / {
proxy_pass http://qishi_upstream;
root html;
index index.html index.htm;
}

9.2.6 分别平滑重启三台机器的nginx服务
/opt/nginx196/sbin/nginx -s reload
9.2.7 访问192.168.1.231就可以看到,WEB1和WEB2交替返回数据
9.2.8 配置权重

在upstream里面配置weight的数值,可以调整服务器的请求权重

可以通过以下几种方式进行权重的配置

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

nginx的使用,以及反向代理,负载均衡,从安装到使用,全部步骤。的更多相关文章

  1. 【05】Nginx:TCP / 正向 / 反向代理 / 负载均衡

    写在前面的话 在我们日常的工作中,不可能所有的服务都是简单的 HTML 静态网页,nginx 作为轻量级的 WEB 服务器,其实我们将它用于更多的地方还是作为我们网站的入口.不管你是后端接口,还是前端 ...

  2. nginx之rewrite重写,反向代理,负载均衡

    rewrite重写(伪静态): 在地址栏输入xx.com/user-xxx.html, 实际上访问的就是xxx.com/user.php?id=xxx rewrite就这么简单 附上ecshop re ...

  3. 如何使用Weave以及Docker搭建Nginx反向代理/负载均衡服务器

    Hi, 今天我们将会学习如何使用 Weave 和 Docker 搭建 Nginx 的反向代理/负载均衡服务器.Weave 可以创建一个虚拟网络将 Docker 容器彼此连接在一起,支持跨主机部署及自动 ...

  4. 项目实战2.2—nginx 反向代理负载均衡、动静分离和缓存的实现

    实验一:实现反向代理负载均衡且动静分离 1.环境准备: 机器名称 IP配置 服务角色 备注 nginx VIP:172.17.11.11 反向代理服务器 开启代理功能 设置监控,调度 rs01 RIP ...

  5. Nginx 反向代理 负载均衡 虚拟主机配置

    Nginx 反向代理 负载均衡 虚拟主机配置 通过本章你将学会利用Nginx配置多台虚拟主机,清楚代理服务器的作用,区分正向代理和反向代理的区别,搭建使用Nginx反向搭理和负载均衡,了解Nginx常 ...

  6. nginx 详解反向代理负载均衡

    什么是反向代理负载均衡 使用代理服务器可以将请求转发给内部的Web服务器,使用这种加速模式显然可以提升静态网页的访问速度.因此也可以考虑使用这种技术,让代理服务器将请求 均匀转发给多台内部Web服务器 ...

  7. Nginx 反向代理 负载均衡 虚拟主机

    Nginx 反向代理 负载均衡 虚拟主机配置 通过本章你将学会利用Nginx配置多台虚拟主机,清楚代理服务器的作用,区分正向代理和反向代理的区别,搭建使用Nginx反向搭理和负载均衡,了解Nginx常 ...

  8. 十.nginx反向代理负载均衡服务实践部署

    期中集群架构-第十章-nginx反向代理负载均衡章节章节====================================================================== 0 ...

  9. 项目实战2.1—nginx 反向代理负载均衡、动静分离和缓存的实现

    总项目流程图,详见 http://www.cnblogs.com/along21/p/8000812.html 实验一:实现反向代理负载均衡且动静分离 1.环境准备: 机器名称 IP配置 服务角色 备 ...

  10. 项目实战02:nginx 反向代理负载均衡、动静分离和缓存的实现

    目录 实验一:实现反向代理负载均衡且动静分离 1.环境准备: 2.下载编译安装tengine 3.设置代理服务器的配置文件 4.启动tengine服务 5.开启后端的web服务 6.测试 实验二:ng ...

随机推荐

  1. 四元数(Quaternion)

    从应用角度说一下unity Quaternion,Quaternion是四元数,百度相关资料可能找到的都是一些大牛给你搞个矩阵云云,给你讲解四元数.在此只是从应用角度讲一讲.最简单理解四元数对应一个向 ...

  2. malloc面试题目(转) - [C++]

    试题4: void GetMemory( char *p ){ p = (char *) malloc( 100 );} void Test( void ) { char *str = NULL; G ...

  3. spring cloud 调用接口间歇性返回http 500 - Internal Server Error的错误

    查找了各种资料都没找到解决办法,token失效,网络问题,接口服务问题,基础服务问题,都考虑过,但是没能解决,偶尔发现服务器网络配置中存在一个virbr0虚拟网卡,问了下了网管,删除这个对服务并没有影 ...

  4. app消息推送

    Mui + 个推 实现消息推送 1.首先去个推 注册一个账号,新建一个消息推送应用 2.配置Mui配置文件 3.使用HBuilder 打包 app 4.然后在到个推后台 发送数据 后台Java代码(官 ...

  5. Dubbo 全链路追踪日志的实现

    微服务架构的项目,一次请求可能会调用多个微服务,这样就会产生多个微服务的请求日志,当我们想要查看整个请求链路的日志时,就会变得困难,所幸的是我们有一些集中日志收集工具,比如很热门的ELK,我们需要把这 ...

  6. 详细梳理ajax跨域4种解决方案

    前言 自动接触前端,跨域这个词就一直萦绕在耳畔.因为一般接手的项目都已经做好了这方面的处理,而且之前一直感觉对这方面模棱两可,所以今天就抽个时间梳理一下. 为什么需要跨域 跨域这个概念来自一个叫 &q ...

  7. git log 附加命令归纳

    git查看历史记录的时候查看每次提交的内容差异: git log -p git限制显示的条数 : git log -p -2 [-2] git简单显示每次提交做了哪些改动: git log --sta ...

  8. 大数据之路week01--day02我实在时被继承super这些东西搞的头疼,今天来好好整理以下。

    这一周的第一天的内容是面向对象的封装,以及对方法的调用.实在时没法单独拿出来单说,就结合这一节一起说了. 我实在是被继承中的super用法给弄的有点晕,程序总是不能按照我想的那样,不是说结果,而是实现 ...

  9. (25)ASP.NET Core EF查询(复杂查询运算符、原生SQL查询、异步查询)

    1.复杂查询运算符 在生产场景中,我们经常用到LINQ运算符进行查询获取数据,现在我们就来了解下生产场景经常出现几种复杂查询运算符. 1.1联接(INNER JOIN) 借助LINQ Join运算符, ...

  10. 痞子衡嵌入式:串行EEPROM接口事实标准及SPI EEPROM简介

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是EEPROM接口标准及SPI EEPROM. 痞子衡之前写过一篇文章 <SLC Parallel NOR简介>,介绍过并行N ...