乐趣区

关于程序员:一篇文章搞定Nginx反向代理与负载均衡

本文章转自:乐字节

文章次要解说:Nginx 反向代理与负载平衡

获取更多 Java 相干材料能够关注公众号《乐字节》发送:999

代理

要想弄明确反向代理,首先要晓得啥是正向代理,要搞懂正向代理只须要晓得啥是代理即可。代理其实就是一个中介,在不同事物或同一事物外部起到居间分割作用的环节。比方买票黄牛,房屋中介等等。

在互联网中代理更多指的是代理服务器,代理服务器位于客户端和服务器之间,它充当两者之间的中介。这种代理在生活中是比拟常见的,比方咱们常说的迷信上网,用到的就是代理技术。

正向代理

正向代理(forward proxy):是一个位于客户端和指标服务器之间的服务器(代理服务器),为了从指标服务器获得内容,客户端向代理服务器发送一个申请并指定指标,而后代理服务器向指标服务器转交申请并将取得的内容返回给客户端。

比方国内拜访谷歌,间接拜访是不行的,咱们能够通过一个可能拜访谷歌的正向代理服务器,申请发到代理服务器,由代理去谷歌获取数据并返回,这样就变相的实现了拜访谷歌的需要。

一句话 总结 :正向代理,就是 代理服务器代理了客户端,去和指标服务器进行交互。

正向代理的用处

  • 冲破 IP 拜访限度
  • 通过缓存减速拜访资源
  • 暗藏客户端实在 IP
  • 客户端拜访受权

反向代理

反向代理(Reverse Proxy):与正向代理正好相同,反向代理中的代理服务器,代理的是服务器那端。代理服务器接管客户端申请,而后将申请转发给外部网络上的服务器,并将从服务器上失去的后果返回给客户端,此时代理服务器对外体现为一个反向代理服务器的角色。

反向代理服务器位于用户与指标服务器之间,然而对于用户而言,反向代理服务器就相当于指标服务器,即用户间接拜访反向代理服务器就能够取得指标服务器的资源。同时,用户不须要晓得指标服务器的地址,也毋庸在用户端作任何设定。

一句话 总结 :反向代理,就是 代理服务器代理了指标服务器,去和客户端进行交互。

反向代理的用处

  • 暗藏服务器实在 IP
  • 负载平衡
  • 通过缓存减速拜访资源
  • 提供平安保障

负载平衡

理论生产环境中,反向代理服务器代理的指标服务器可能不止一个。比方开发好的某个利用部署在一台 Tomcat 服务器上,而 Tomcat 的并发下限不优化状况下,默认只有两百左右,这时候为了解决高并发的问题,就只能抉择更替服务器或者搭建多台服务器通过反向代理与负载平衡的技术解决并发问题。

负载平衡 (Load Balance)是由 多台服务器以对称的形式组成一个服务器集群 ,每台服务器都具备等价的位置,都能够独自对外提供服务而无须其余服务器的辅助。通过某种负载分管技术,将内部发送来的 地方申请平均调配 到对称构造中的 某一台服务器 上。

总结

正向代理,就是 代理服务器代理了客户端,去和指标服务器进行交互。现实生活中的场景:黄牛买票。

反向代理,就是 代理服务器代理了指标服务器,去和客户端进行交互。现实生活中的场景:房屋中介。

Nginx 反向代理与负载平衡

后面咱们提到搭建多台服务器并通过反向代理与负载平衡的技术能够解决并发问题,那么负载平衡的实现从哪来?为了防止反复造轮子,咱们抉择现成已有的成熟工具帮忙咱们实现这项工作。Nginx 就是一个不错的抉择。

Nginx 是由 Igor Sysoev(伊戈尔 · 赛索耶夫)为俄罗斯访问量第二的 https://www.rambler.ru/ 站点开发的。Nginx 是一个高性能的 HTTP 和反向代理服务器,能够扛得住 5W 左右的并发。Ngnix 一方面能够做反向代理服务器,另外一方面还能够做动态资源服务器。本文次要学习如何应用 Nginx 实现反向代理与负载平衡。

官网:http://nginx.org/

环境

  • 三台 CentOS 7.8.2003 机器
  • 192.168.10.101 装置 Nginx 1.18.0
  • 192.168.10.102192.168.10.103 装置 Tomcat 9.0.38

装置 Nginx

下载资源

下载 Nginx 并解压。

# 下载 nginx 压缩包
wget -P /usr/local/src http://nginx.org/download/nginx-1.18.0.tar.gz
# 解压
tar -zxvf /usr/local/src/nginx-1.18.0.tar.gz -C /usr/local/src

装置依赖

Nginx 是基于 C 语言开发的,HTTP 模块应用了 pcre 来解析正则表达式,且能够应用 zlib 对 HTTP 包的内容进行 gzip 压缩,Nginx 不仅反对 HTTP 协定,还反对 HTTPS,HTTPS 须要 openssl 提供反对,所以装置 Nginx 之前必须先装置它所依赖的环境。

yum install -y gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl-devel

装置 Nginx

编译并装置。

# 切换至 nginx 的解压目录
cd /usr/local/src/nginx-1.18.0
# 创立 nginx 的装置目录
mkdir -p /usr/local/nginx
# 指定 nginx 的装置门路
./configure --prefix=/usr/local/nginx/
# 编译并装置
make && make install

常用命令

Nginx 运行时默认加载的配置文件为 nginx.conf,依据不同的装置形式寄存的地位也不雷同。yum 装置的形式会寄存在 /etc/nginx/nginx.conf,本文的装置形式会寄存在 /usr/local/nginx/conf/nginx.conf

帮忙
# 切换目录
cd /usr/local/nginx

# 帮忙
[root@localhost nginx]# sbin/nginx -h
nginx version: nginx/1.18.0
Usage: nginx [-?hvVtTq] [-s signal] [-c filename] [-p prefix] [-g directives]

Options:
  -?,-h         : this help
  -v            : show version and exit
  -V            : show version and configure options then exit
  -t            : test configuration and exit
  -T            : test configuration, dump it and exit
  -q            : suppress non-error messages during configuration testing
  -s signal     : send signal to a master process: stop, quit, reopen, reload
  -p prefix     : set prefix path (default: /usr/local/nginx//)
  -c filename   : set configuration file (default: conf/nginx.conf)
  -g directives : set global directives out of configuration file
查看版本
# 查看版本
[root@localhost nginx]# sbin/nginx -v
nginx version: nginx/1.18.0

# 查看版本及配置选项
[root@localhost nginx]# sbin/nginx -V
nginx version: nginx/1.18.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC) 
configure arguments: --prefix=/usr/local/nginx/
查看配置
# 检测配置文件是否有语法错误,默认检测 conf/nginx.conf
[root@localhost nginx]# sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
启动
# 启动并通过 -c 指定启动时加载的配置文件,默认加载 conf/nginx.conf
sbin/nginx -c /usr/local/nginx/conf/nginx.conf
重启
# 平滑的重启,从新加载配置
sbin/nginx -s reload
进行
# 疾速进行
sbin/nginx -s stop

# 残缺有序的进行
sbin/nginx -s quit
日志切割
# 从新关上日志文件(日志切割)。sbin/nginx -s reopen

比方咱们把架设在 Nginx 上的所有网站拜访日志都寄存在一个文件里,这样与日俱增所有网站的拜访记录就会把日志文件越积越大,当须要查看日志文件的时候就会变得十分麻烦。如果把每天的日志文件宰割开来用相应的日期进行标识,查看日志的操作就会变得十分敌对了。

日志切割实现流程如下:

  • 挪动原文件到新文件目录中。其实这个时候 Nginx 还是会持续将日志写入该文件。
  • 执行 nginx -s reopen 关上一个新的日志文件,Nginx 会把新的日志信息写入该文件。

这样就实现了日志的切割工作,同时切割过程中也不会失落任何日志信息。

拜访

启动 Nginx 当前,浏览器拜访:http://192.168.10.101:80/ 后果如下:

装置 Tomcat

下载资源

下载 Tomcat 并解压。

# 下载 tomcat 压缩包
wget -P /usr/local/src https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-9/v9.0.38/bin/apache-tomcat-9.0.38.tar.gz
# 创立目录
mkdir -p /usr/local/tomcat
# 解压
tar -zxvf /usr/local/src/apache-tomcat-9.0.38.tar.gz -C /usr/local/tomcat

批改页面

批改 Tomcat 自带 ROOT 我的项目中的 index.jsp 页面。

# 编辑 index.jsp
vim /usr/local/tomcat/apache-tomcat-9.0.38/webapps/ROOT/index.jsp

在 body 标签中轻易增加点内容用于辨别不同的服务器。

<h1 style="color:red">192.169.10.102:8080</h1>
<h1 style="color:red">192.169.10.103:8080</h1>

启动拜访

/usr/local/tomcat/apache-tomcat-9.0.38/bin/startup.sh 启动 Tomcat。

启动 Tomcat 当前,浏览器拜访:http://192.168.10.102:8080/ 和 http://192.168.10.103:8080/ 后果如下:

配置 Nginx

vim /usr/local/nginx/conf/nginx.conf 编辑配置文件。

http 节点下,增加 upstream 节点。应用 upstream name{} 语法定义一组服务器。

而后在 server 节点的 80 端口下增加下图中的内容。默认状况下,Nginx 是按加权轮询的形式将申请散发到各个服务器,当权重 weight 不指定时,各服务器 weight 雷同。对于 Nginx 启动用户的问题请依据本身理论环境进行配置。

反向代理负载平衡

通过下面的流程,咱们曾经实现基于 Nginx 实现反向代理 Tomcat 服务器集群与负载平衡的需要。重启 Nginx 当前,此时再拜访 Nginx 则会被路由到被代理的 Tomcat 服务器上,并且采纳了轮询形式(默认)的负载平衡算法。客户端申请到 Nginx 的地方申请会每台一次的平均分配至 Tomcat 每个机器上。对于 Nginx 更多具体的配置及负载平衡算法咱们前面再另开文章细说。

感激大家的认同与反对,小编会继续转发《乐字节》优质文章

退出移动版