服务器之家:专注于服务器技术及软件下载分享
分类导航

云服务器|WEB服务器|FTP服务器|邮件服务器|虚拟主机|服务器安全|DNS服务器|服务器知识|Nginx|IIS|Tomcat|

服务器之家 - 服务器技术 - Nginx - Nginx反向代理与负载均衡实战篇

Nginx反向代理与负载均衡实战篇

2020-01-05 15:20mori_d Nginx

这篇文章主要介绍了Nginx反向代理与负载均衡实战篇,需要的朋友可以参考下

反向代理

反向代理指的是以代理服务器接收用户的的访问请求,代理用户向内部服务器重新发起请求,最后把内部服务器的响应信息返回给用户。这样,代理服务器对外就表现为一台服务器,而访问内部服务器的客户端用的就是代理服务器,而不是真实网站访问用户。

为什么使用反向代理

  • 可以起到保护网站安全的作用,因为任何来自Internet的请求都必须先经过代理服务器。

  • 通过缓存静态资源,加速Web请求。

  • 实现负载均衡

反向代理例子

环境说明

假如有AB两个服务器。A服务器提供web资源,并且只给内网访问。B服务器有两块网卡,一块与A服务器在一个内网,以块是外网。此时,用户C想直接访问A服务器是行不通的。这时就可以通过B服务器代理用户C的请求去访问A服务器了。

 

hostname

网卡

IP

说明

moli-04

ens33

192.168.30.6

内网IP,代理服务器

moli-04

ens37

192.168.93.129

外网IP,代理服务器

moli-05

ens33

192.168.30.7

内网服务器

 

  • 两台机器都安装nginx

  • moli-05服务器访问是wordpress博客,域名blog.syushin.org

  • 虚拟机实验环境,就都关闭防火墙了

配置虚拟主机

moli-04机器上编辑虚拟主机配置文件,内容如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
[root@moli-04 extra]$ cat blog.syushin.org.conf
server{
 listen 80;
 server_name blog.syushin.org;
 
 location / {
  proxy_pass http://192.168.30.7;
  proxy_set_header Host $host;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 }
}

更改hosts文件

windows上修改hosts文件,添加配置

192.168.93.129 blog.syushin.org

浏览器测试

Nginx反向代理与负载均衡实战篇

访问地址是192.168.93.129,出现的界面的05机器的页面,配置成功。

负载均衡

负载均衡的功能

  • 对用户的访问请求进行调度管理

  • 对用户的访问请求进行压力分担

负载均衡集群在运行时,一般是通过一个或者多个前端负载均衡器将客户访问请求发到后端的一组服务器上。

Nginx负载均衡

严格来说,Nginx仅仅是作为Nginx Proxy反向代理的使用的,但是因为这个反向代理功能表现的效果是负载均衡机器的效果,因此nginx负载均衡是特殊的反向代理。

实现Nginx负载均衡的主要组件:

 

Nginx模块

说明

ngx_http_proxy_module

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

ngx_http_upstream_module

负载均衡模块,可以实现网站的负载均衡功能及节点的健康检查

 

upstream模块介绍

ngx_http_upstream_module模块支持的代理方式有proxy_pass,fastcgi_pass等,主要使用proxy_pass。

upstream模块允许nginx定义一组或多组节点服务器组,使用时通过proxy_pass代理把网站的请求发送到定义好的对应的节点组中。

示例:创建节点服务器池

?
1
2
3
4
5
upstream blog {
 server 192.168.30.5:80 weight=5;
 server 192.168.30.6:81 weight=10;
 server 192.168.30.7:82 weight=15;
}

upstream:创建节点服务器组的关键字,必须有;
blog:节点服务器组的名字,必须有,可自定义名字;
server:关键字,后面可加IP或者域名或者IP:端口,不指定端口默认80;
weight:权重,数值越大被分配的请求越多。默认为1

设置节点服务器的状态值除了weight之外,还有:
max_fails:允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误.
fail_timeout:max_fails次失败后,暂停的时间。
down:表示当前的节点服务器不参与负载,标志机器永远不可用,可配合iP_hash使用
backup:其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。

使用域名的upstream

?
1
2
3
4
5
upstream blog2{
 server www.syushin.com weight=5;
 server blog.syushin.org down;
 server blog.syushin.cc backup;
}

调度算法

rr轮询(默认调度算法,静态调度算法)

按客户端请求顺序把客户端的请求逐一分配到不同的后端节点服务器。

wrr(权重轮询,静态调度算法)

在rr轮询的基础上加上权重,使用该算法的时候,权重和用户访问成正比,权重值越大,被转发的请求就越多。
比如有30个请求,2台服务器A(10.0.0.1)和B(10.0.0.2),如果希望A处理10个请求,B处理20个请求,可以这样定义:

?
1
2
3
4
upstream pools{
 server 10.0.0.1 weight=1;
 server 10.0.0.2 weight=2;
}

ip_hash(静态调度算法)

每个请求按客户端IP的hash结果分配,当新的请求到达,先将客户端IP通过哈希算法哈希出一个值,在随后的分配客户端请求中,客户IP的哈希值只要相同,就会被分配到同一台服务器。

?
1
2
3
4
5
upstream blog_pool{
 ip_hash;
 server 192.168.30.5:80;
 server 192.168.30.6:8090;
}

注意:当使用ip_hash时,不能有weight和backup。

least_conn算法

least_conn算法会根据后端服务器的连接数来觉得分配情况,哪台服务器连接数最少就分发多的请求。

调度算法除了上面所列的(常用)还有很多,就不一一列举了。

http_proxy_module模块

http_proxy_module可以将请求转发到另外一台服务器,在反向代理中,会通过location功能匹配指定的URI,然后把收到符合匹配的URI的请求通过proxy_pass抛给定义好的upstream节点池。

http_proxy模块参数

 

参数

说明

proxy_set_header

设置http请求header项传给后端服务器节点,例如:可实现让代理后端的服务器节点获取访问客户端用户的真实IP地址

client_body_buffer_size

用于指定客户端请求主体缓冲区大小

proxy_connect_timeout

表示反向代理后端节点服务器连接的超时时间,即发起握手等候响应的超时时间

proxy_send_timeout

表示代理后端服务器的数据回传时间,即在规定时间内后端服务器必须传完所有数据,否则nginx将断开这个连接

proxy_read_timeout

设置nginx从代理的后端服务器获取信息的时间,表示连接建立成功后,nginx等待后端服务器的响应时间,其实是nginx已经进入后端的排队之中等候处理的时间

proxy_buffer_size

设置缓冲区大小,默认该缓冲区大小等于指令proxy_buffers设置的大小

proxy_buffers

设置缓冲区的数量和大小,nginx从代理的后端服务器获取的响应信息,会设置到缓冲区

proxy_busy_buffers_size

用于设置相同很忙时可以使用的proxy_buffers大小,官方推荐的大小为 proxy_buffers * 2

proxy_trmp_file_write_size

指定proxy缓存临时文件的大小

 

proxy_pass使用

格式:proxy_pass URL;

示例如下:

proxy_pass http://blog.syushin.com/;
proxy_pass http://192.168.30.7:8080/uri;
proxy_pass http://tmp/www.sock;

URL可以是域名,IP地址也可以是socket文件。

对于proxy_pass的配置有几点需要注意:
示例1

location /upload/ {
    proxy_pass http://192.168.30.7;
}

示例2

location /upload/ {
    proxy_pass http://192.168.30.7/; # 注意多了一个斜杆
}

示例3

location /upload/ {
    proxy_pass http://192.168.30.7/blog/;
}

示例4

location /upload/ {
    proxy_pass http://192.168.30.7/blog;
}

假如server_name为blog.syushin.com,当请求http://blog.syushin.com/uploa...,上面示例1-4的请求结果是:

示例1:http://192.168.30.7/upload/index.html
示例2:http://192.168.30.7/index.html
示例3:http://192.168.30.7/blog/index.html
示例4:http://192.168.30.7/blogindex.html

好了,这篇文章就介绍到这了,希望大家以后多多支持服务器之家。

原文链接:https://segmentfault.com/a/1190000018493330

延伸 · 阅读

精彩推荐
  • Nginxnginx ssl免密码重启教程详解

    nginx ssl免密码重启教程详解

    这篇文章给大家介绍了nginx 如何启动以及nginx ssl 免密码重启 的方法,非常不错,具有参考借鉴价值,需要的朋友参考下吧 ...

    mrr4272019-11-19
  • NginxNginx Rewrite使用场景及代码案例详解

    Nginx Rewrite使用场景及代码案例详解

    这篇文章主要介绍了Nginx Rewrite使用场景及代码案例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可...

    盗哥泡茶去了11862020-09-27
  • Nginx利用nginx和腾讯云免费证书制作https的方法

    利用nginx和腾讯云免费证书制作https的方法

    这篇文章主要介绍了利用nginx和腾讯云免费证书制作https的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 ...

    dalaoyang5992019-12-30
  • Nginx如何优化Nginx的处理性能

    如何优化Nginx的处理性能

    Nginx是一个很强大的高性能Web和反向代理服务,它具有很多非常优越的特性,在连接高并发的情况下,Nginx是Apache服务不错的替代品。其特点是占有内存少,...

    Dockone.io5142020-12-11
  • Nginxnginx rewrite 伪静态配置参数和使用例子

    nginx rewrite 伪静态配置参数和使用例子

    nginx下伪静态配置参数详细说明,使用nginx的朋友,nginx rewrite 伪静态配置参数和使用例子 附正则使用说明 ...

    服务器之家3102019-10-08
  • NginxNginx动静分离实现案例代码解析

    Nginx动静分离实现案例代码解析

    这篇文章主要介绍了Nginx动静分离实现案例代码解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参...

    盗哥泡茶去了3382020-09-27
  • Nginx通过Nginx规则重写URL去掉index.php不显示index.php

    通过Nginx规则重写URL去掉index.php不显示index.php

    Nginx不仅占用内存少,并发能力强,而且拓展功能丰富,可以通过安装模板来强化功能,也能通过规则优化,优化服务器并发处理能力,是建站的不二之选...

    Genius日记5872020-10-16
  • NginxNginx location 和 proxy_pass路径配置问题小结

    Nginx location 和 proxy_pass路径配置问题小结

    本文是基于 location 的匹配末尾是否配置 / 和 proxy_pass 末尾是否配置 / ,进行测试,完全还原了整个测试过程,本文给大家介绍Nginx location 基本配置及相关配...

    自由早晚乱余生18742021-09-24