Nginx作为面试中的大…小头目,自然是不能忽视的,而以下两点就是它能成为面试中头目的招牌。
反向代理和负载均衡
在此之前,我们先对Nginx做一个简单的了解
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。因它的稳定性、丰富的功能集、简单的配置文件和低系统资源的消耗而闻名。
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好。在连接高并发的情况下,Nginx能够支持高达 50,000 个并发连接数的响应。
http 服务器。Nginx 是一个 http 服务可以独立提供 http 服务。可以做网页静态服务器。
虚拟主机。可以实现在一台服务器虚拟出多个网站。例如个人网站使用的虚拟主机。
反向代理,负载均衡。当网站的访问量达到一定程度后,单台服务器不能满足用户的请求时,需要用多台服务器集群可以使用 nginx 做反向代理。并且多台服务器可以平均分担负载,不会因为某台服务器负载高宕机而某台服务器闲置的情况。
对Nginx做了简单了解后,我们去了解一下它的最核心的两个功能:
想要了解反向代理,我们需要去了解一下什么是代理
代理服务器(Proxy Server)是一种重要的服务器安全功能,它的工作主要在开放系统互联(OSI)模型的会话层,从而起到防火墙的作用。代理服务器大多被用来连接INTERNET(国际互联网)和INTRANET(局域网)。
正向代理是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端才能使用正向代理。
正向代理的典型用途是为在防火墙内的局域网客户端提供访问Internet的途径。正向代理还可以使用缓冲特性(由mod_cache提供)减少网络使用率。
关于正向代理我们不做过多阐述。
反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。
反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源。同时,用户不需要知道目标服务器的地址,也无须在用户端作任何设定。反向代理服务器通常可用来作为Web加速,即使用反向代理作为Web服务器的前置机来降低网络和服务器的负载,提高访问效率。
我们去配置一下linux中Nginx的配置文件:
去你的Nginx的安装目录下找到nginx.conf文件,一般是在/usr/local/nginx/conf/nginx.con中,如果是第一次打开可以把#的注释都删除了,为了方便查看。
server {
listen 81; # 监听的端口
server_name localhost; # 域名或ip
location / { # 访问路径配置
root index;# 根目录
index index.html index.htm; # 默认首页
}
error_page 500 502 503 504 /50x.html; # 错误页面
location = /50x.html {
root html;
}
}
第一步:我们去配置反向代理
先在Nginx主机修改nginx.conf配置文件,在server上加上一个
upstream 自定义名称{
server 192.168.177.129:8080; 网站的访问路径
}
如下:
upstream tomcat-travel{
server 192.168.177.129:8080;
}
server {
listen 80; # 监听的端口
server_name www.hmtravel.com; # 域名或ip
location / { # 访问路径配置
# root index;# 根目录
proxy_pass http://tomcat-travel;
index index.html index.htm; # 默认首页
}
}
第二步:重新启动Nginx
我们进入到Nginx的安装目录下的sbin目录下
./nginx -s quit 关闭Nginx
./nginx -s stop 关闭Nginx
./nginx 启动Nginx
ps aux|grep nginx 查看Nginx进程
./nginx -s reload 重启Nginx(会重新读取配置文件)
当我们没有配置反向代理时:
浏览器通过tomcat主机的ip地址直接请求网站
当我们设置反向代理后:
浏览器请求服务器,请求的是代理服务器Nginx,通过Nginx设置的域名,也就是我们在nginx.conf中设置的server_name。然后通过proxy_pass去查找代理的服务器的ip,就会查到server上面的upstream,通过upstream获取里面设置的ip地址。然后我们通过ip去访问tomcat中部署的项目。
当你理解了反向代理的执行流程,负载均衡也就很简单了
首先我们先去了解一下负载均衡的基本描述:
负载均衡,英文名称为Load Balance,其含义就是指将负载(工作任务)进行平衡、分摊到多个操作单元上进行运行,例如FTP服务器、Web服务器、企业核心应用服务器和其它主要任务服务器等,从而协同完成工作任务。
负载均衡构建在原有网络结构之上,它提供了一种透明且廉价有效的方法扩展服务器和网络设备的带宽、加强网络数据处理能力、增加吞吐量、提高网络的可用性和灵活性。
简单理解为:多个tomcat,分担并发量,虽然我们可以在一台linux上复制多个tomcat,但是,在企业中,都是一台linux上一个tomcat。
举个例子:假设一台tomcat的并发量只有200,现在你的网页系统同一时候处理的请求数量(事务数)大于200,那么你的tomcat就会挂掉,这时就需要多台tomcat来分担这个并发量。
Nginx的负载均衡,反向代理是它的基础,只需要在upstream中写入多个server即可。
upstream tomcat-travel {
server 192.168.177.129:8080;
server 192.168.177.129:8081;
server 192.168.177.129:8082;
}
server {
listen 80; # 监听的端口
server_name www.hmtravel.com; # 域名或ip
location / { # 访问路径配置
# root index;# 根目录
proxy_pass http://tomcat-travel;
index index.html index.htm; # 默认首页
}
error_page 500 502 503 504 /50x.html; # 错误页面
location = /50x.html {
root html;
}
}
此处代码使用的是一台linux上3个tomcat使用不同端口来实现的。正常为,一台linux上只有一个tomcat。
负载均衡的执行流程和上面写的反向代理一样,只是在通过server_name去查找服务时,从一个变为从3个中随机选取一个。3个被选的概率一致,均为33%。
当然我们可以进行一个权重的配置。只需要在upstream中路径后面加一个weight属性就行,如:
upstream tomcat-travel {
server 192.168.177.129:8080 weight 2;
server 192.168.177.129:8081;
server 192.168.177.129:8082;
}
现在8080端口的访问量占从原来的3分之一,变成了2分之一。(原来3台中随机一台,现在相当于新增一台8080端口的访问路径,就变成4台,8080占两份)。