nginx服务器有什么作用?什么叫反向代理?为什么要使用反向代理?

大家好,我是IT修真院武汉分院第15期学员,一枚正直善良的JAVA程序员。

今天给大家分享一下,修真院官网JAVA任务3中,什么是nginx?为什么要使用nginx进行反向代理?



一、背景介绍

什么是ngnix

Nginx 是俄罗斯人编写的十分轻量级的 HTTP 服务器,Nginx,它的发音为“engine X”,是一个高性能的HTTP和反向代理服务器,同时也是一个 IMAP/POP3/SMTP 代理服务器。Nginx 是由俄罗斯人 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,它已经在该站点运行超过两年半了。Igor Sysoev 在建立的项目时,使用基于 BSD 许可。
到 2013 年,目前有很多国内网站采用 Nginx 作为 Web 服务器,如国内知名的淘宝、京东、百度、新浪、163、腾讯、Discuz、豆瓣等。据 netcraft 统计,Nginx 排名第 3,约占 15% 的份额

总结三大优点:性能高、轻量级、易操作

nginx的使用场景

1、反向代理

2、负载均衡

3、动静分离

反向代理:反向代理(ReverseProxy)是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,简单来说就是真实的服务器不能直接被外部网络访问,想要访问必须通过代理。

反向代理的作用

1、防止主服务器被恶意攻击

2、为负载均衡和动静分离提供实现支持

负载均衡:使用反向代理同时代理多个相同内容的应用服务器(比如tomcat),将客户端请求分发到各个应用服务器上并接收响应返回给客户端

负载均衡的作用:当一台服务器的单位时间内的访问量越大时,服务器压力就越大,大到超过自身承受能力时,服务器就会崩溃。为了避免服务器崩溃,让用户有更好的体验,我们通过负载均衡的方式来分担服务器压力。我们可以建立很多很多服务器,组成一个服务器集群,当用户访问网站时,先访问一个中间服务器,在让这个中间服务器在服务器集群中选择一个压力较小的服务器,然后将该访问请求引入该服务器。如此一来,用户的每次访问,都会保证服务器集群中的每个服务器压力趋于平衡,分担了服务器压力,避免了服务器崩溃的情况。

动静分离:运用Nginx的反向代理功能分发请求:所有动态资源的请求交给应用服务器,而静态资源的请求(例如图片、视频、CSS、JavaScript文件等)则直接由Nginx返回到浏览器

动静分离的作用:主要是nginx处理静态页面的效率远高于tomcat的处理能力,使用c语言开发的nginx对静态资源每秒的吞吐量是使用Java语言开发的tomcat的6倍,也远高于其它应用服务器

总而言之:nginx应用之所以广泛,我认为这归功于它的灵活配置,一个nginx.conf文件解决大部分问题,不论是nginx创建虚拟服务器、nginx的反向代理服务器,还是nginx的负载均衡,几乎都在这个配置文件中进行。服务器上只负责把nginx搭好,跑起来即可。而且它本身轻量级,不需要占用服务器太多资源就可以达到较好的效果,是一个非常值得推崇的服务器。




二、知识剖析

代理服务器

一般是指局域网内部的机器通过代理服务器发送请求到互联网上的服务器,代理服务器一般作用在客户端。 一个完整的代理请求过程为:客户端首先与代理服务器创建连接,接着根据代理服务器所使用的代理协议,请求对目标服务器创建连接、或者获得目标服务器的指定资源。 Web代理(proxy)服务器是网络的中间实体。 代理位于Web客户端和Web服务器之间,扮演“中间人”的角色。HTTP的代理服务器即是Web服务器又是Web客户端。

正向代理
正向代理 是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。

反向代理
反向代理 在计算机世界里,由于单个服务器的处理客户端(用户)请求能力有一个极限,当用户的接入请求蜂拥而入时,会造成服务器忙不过来的局面,可以使用多个服务器来共同分担成千上万的用户请求,这些服务器提供相同的服务,对于用户来说,根本感觉不到任何差别。在服务器端接受客户端的请求,然后把请求分发给具体的服务器进行处理,然后再将服务器的响应结果反馈给客户端。

反向代理的实现

1)需要有一个负载均衡设备来分发用户请求,将用户请求分发到空闲的服务器上;
2)服务器返回自己的服务到负载均衡设备;
3)负载均衡将服务器的服务返回用户;






三、常见问题

 负载均衡策略有几种

Nginx目前支持自带3种负载均衡策略,还有2种常用的第三方策略。

1、RR(默认)
            每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
 2、权重
            指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
 3、ip_hash
           上面的2种方式都有一个问题,那就是下一个请求来的时候请求可能分发到另外一个服务器,
   当我们的程序不是无状态的时候(采用了session保存数据),这时候就有一个很大的很问题了,比如把登录信息保存到了session中,
   那么跳转到另外一台服务器的时候就需要重新登录了,所以很多时候我们需要一个客户只访问一个服务器,那么就需要用iphash了,
   iphash的每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
 4、fair(第三方)
            按后端服务器的响应时间来分配请求,响应时间短的优先分配。
 5、url_hash(第三方)
            按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。 


4.解决方案




五、编码实战



六、扩展思考


七、参考文献



八、更多讨论

Q1、正向代理和反向代理的区别?

答:正向代理是代理客户端发送请求,反向代理是代理服务端接收请求

Q2、动态资源里面嵌入的静态资源有必要使用动静分离吗

答:nginx处理静态资源的性能比普通的应用服务器高6倍左右

Q3、server_name可以配置多个吗

答:可以
Q4:反向代理和负载均衡有何区别?

反向代理是实现负载均衡的一种方法。先谈反向代理。用户在请求时,先把请求发送给代理的服务器,然后由代理服务器根据算法去请求真实的服务器,最后返回给用户。这种做法,其一是提高了安全性;其二是通过多台的realserver分担了用户的请求,实现了负载均衡。再谈负载均衡。负载均衡的出现,是通过横向的扩展,尽可能地降低单台服务器的压力。常见WEB层面的负载均衡的方案有硬件F5Nginx代理、LVS、各个云商的负载均衡服务(AWSELB服务)等。负载均衡后面连的一般是实际提供服务的服务器,如通过ELB服务,可以做到流量的均匀分担,从而减少单机服务器的压力。

今天的分享就到这里啦,欢迎大家提问和探讨!

你可能感兴趣的:(nginx服务器有什么作用?什么叫反向代理?为什么要使用反向代理?)