1.背景介绍

现在许多大型web网站都用到反向代理。除了可以防止外网对内网服务器的恶性攻击、缓存以减少服务器的压力和访问安全控制之外,还可以进行负载均衡,将用户请求分配给多个服务器。

反向代理服务器Nginx

Nginx作为近年来较火的反向代理服务器,安装在目的主机端,主要用于转发客户机请求,后台有多个http服务器提供服务,nginx的功能就是把请求转发给后面的服务器,决定哪台目标主机来处理当前请求。

2.知识剖析

1.什么是代理服务器:

代理服务器,客户端在发送请求时,不会直接发给主机,而是先发给代理服务器,代理服务器接受请求之后将请求分发给不同的主机,并接受主机返回的数据,存在代理服务器中的硬盘中,再发送给客户端。

2.使用代理服务器有什么优点:

(1)提高访问速度

由于目标主机返回的数据会存放在代理服务器的硬盘中,因此下一次客户再访问相同的站点数据时,会直接从代理服务器的硬盘中读取,起到了缓存的作用,尤其对于热门站点能明显提高请求速度。

(2)防火墙作用

由于所有的客户机请求都必须通过代理服务器访问远程站点,因此可在代理服务器上设限,过滤某些不安全信息。

(3)通过代理服务器访问不能访问的目标站点

互联网上有许多开发的代理服务器,客户机在访问受限时,可通过不受限的代理服务器访问目标站点,通俗说,我们使用的翻墙浏览器就是利用了代理服务器,可直接访问外网。

3.正向代理和反向代理:

正向代理,架设在客户机与目标主机之间,只用于代理内部网络对Internet的连接请求,客户机必须指定代理服务器,并将本来要直接发送到Web服务器上的http请求发送到代理服务器中。
什么意思呢,就是学生从四面八方过来上学,但大门只有一个,学校也只有一个,所有的学生都必须通过这个大门才能进入学校,学生好像是客户机,大门就是代理服务器,学校就是目标主机。

反向代理服务器架设在服务器端,通过缓冲经常被请求的页面来缓解服务器的工作量,将客户机请求转发给内部网络上的目标服务器;
并将从服务器上得到的结果返回给Internet上请求连接的客户端,此时代理服务器与目标主机一起对外表现为一个服务器。
打个比方,反向代理就好像是幼儿园学生放学了要回家,老师只有一个,学生家长有很多,老师领着学生将学生交给家长,这里面呢,学生就是各个客户机请求,老师是一个代理服务器,家长是各个目标主机,老师管理者各个学生,再把各个学生分发给不同的家长,这就是反向代理。

4.负载均衡:

(1)为什么要使用负载均衡

当一台服务器的单位时间内访问量越大的时候,服务器压力会越大,当一台服务器压力大得超过自身的承受压力的时候,服务器会崩溃。
为了避免服务器崩溃,让用户更好的体验,我们通常通过负载均衡的方式来分担服务器的压力。那么什么是负载均衡呢?我们可以建立很多个服务器,
这些服务器组成一个服务器集群,然后当用户访问我们的网站的时候,先访问一个中间服务器,再让这个中间服务器在服务器群中选择一个压力较小的服务器,
然后将该访问请求引入选择的服务器。这样,用户每次的访问,都会保证服务器集群中的每个服务器的压力区域平衡,分担了服务器的压力,避免了服务器崩溃的情况。

(2)几种负载均衡的方式

1)、轮询(默认)

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。

2)、weight

指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。

3)、ip_hash

每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。

4)、fair(第三方)

按后端服务器的响应时间来分配请求,响应时间短的优先分配。

5)、url_hash(第三方)

5.nginx的动静分离

一般由nginx处理并发的http请求,如果该请求返回的响应是静态文件(html,htm,css,js,图片等),
            则直接由nginx处理,如果是动态文件(jsp,jspx,do,wsdl)等,则将该请求转发给Servlet容器Tomcat、Jetty、resin等进行处理。

3.常见问题

怎么实现上面说的反向代理,负载均衡和动静分离?
在nginx的安装目录下打开nginx.conf文件,在里面配置一些内容。

4.编码实战

5.扩展思考

nginx配置location总结:

location匹配顺序:

location = /uri    =开头表示精确匹配,只有完全匹配上才能生效。</p>
location ^~ /uri   ^~ 开头对URL路径进行前缀匹配,并且在正则之前。</p>
location ~ pattern  ~开头表示区分大小写的正则匹配。</p>
location ~* pattern  ~*开头表示不区分大小写的正则匹配。

location /uri     不带任何修饰符,也表示前缀匹配,但是在正则匹配之后。 </p>    
location /      通用匹配,任何未匹配到其它location的请求都会匹配到。 </p>
匹配顺序的中间的注意点:</p>    
1.匹配的顺序是先匹配普通字符串,然后再匹配正则表达式。另外普通字符串匹配顺序是根据配置中字符长度从长到短,
也就是说使用普通字符串配置的location顺序是无关紧要的,反正最后nginx会根据配置的长短来进行匹配,但是需要注意的是正则表达式按照配置文件里的顺序测试。找到第一个比配的正则表达式将停止搜索。

2.一般情况下,匹配成功了普通字符串location后还会进行正则表达式location匹配。有两种方法改变这种行为,
其一就是使用“=”前缀,这时执行的是严格匹配,并且匹配成功后立即停止其他匹配,同时处理这个请求;
另外一种就是使用“^~”前缀,如果把这个前缀用于一个常规字符串那么告诉nginx 如果路径匹配那么不测试正则表达式。

6.参考文献

https://blog.csdn.net/qw_xingzhe/article/details/79580800</p>
https://blog.csdn.net/why_2012_gogo/article/details/51407037</p>
https://blog.csdn.net/Al_assad/article/details/76561991</p>
https://www.cnblogs.com/coder-yoyo/p/6346595.html

7.更多讨论

nignx的各个模块:

nginx的模块根据其功能基本上可以分为以下几种类型:

event module: 搭建了独立于操作系统的事件处理机制的框架,及提供了各具体事件的处理。包括ngx_events_module, ngx_event_core_module和ngx_epoll_module等。nginx具体使用何种事件处理模块,这依赖于具体的操作系统和编译选项。
phase handler: 此类型的模块也被直接称为handler模块。主要负责处理客户端请求并产生待响应内容,比如ngx_http_static_module模块,负责客户端的静态页面请求处理并将对应的磁盘文件准备为响应内容输出。
output filter: 也称为filter模块,主要是负责对输出的内容进行处理,可以对输出进行修改。例如,可以实现对输出的所有html页面增加预定义的footbar一类的工作,或者对输出的图片的URL进行替换之类的工作。
upstream: upstream模块实现反向代理的功能,将真正的请求转发到后端服务器上,并从后端服务器上读取响应,发回客户端。upstream模块是一种特殊的handler,只不过响应内容不是真正由自己产生的,而是从后端服务器上读取的。
load-balancer: 负载均衡模块,实现特定的算法,在众多的后端服务器中,选择一个服务器出来作为某个请求的转发服务器。

nginx的负载均衡是怎么达到的?

在nginx的安装目录下打开nginx.conf文件,在里面配置我们需要用到的负载均衡的方式,比如轮询,比重之类的。

正向代理一般在什么情况下使用?

正向代理一般是我们访问国外或者我们直接访问不到的地址的时候,这时候就需要一个正向代理,代理我们的服务器,然后通过正向代理向目的服务器发起请求,之后就可以访问到目的服务器了。

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

  1. nginx服务器开启缓存、反向代理

    一.反向代理配置 1.反向代理服务器配置如下 反向代理就是需要这一行proxy_pass来完成.当我们要访问后端web服务器的时候,我们只需要访问代理服务器就可以了,此时代理服务器就充当后端web服务 ...

  2. 【转】Nginx服务器的反向代理proxy_pass配置方法讲解

    [转]Nginx服务器的反向代理proxy_pass配置方法讲解 转自:http://www.jb51.net/article/78746.htm 就普通的反向代理来讲 Nginx的配置还是比较简单的 ...

  3. Nginx服务器、Nginx虚拟主机、Nginx反向代理

    nginx安装[依赖包,./configure模块] nginx升级[make upgrade] nginx[默认welcome测试网站] nginx[用户认证] nginx [server{ }虚拟 ...

  4. 06蚂蚁-高性能Nginx服务器——1.反向代理

    环境准备 CentOS7 7.0 64位 以上+一台外网服务器+一个域名+CDN内容分发 电脑配置 16g以上内存 CentOS7 关闭防火墙 //临时关闭 systemctl stop firewa ...

  5. nginx服务器使用tomcat——nginx的反向代理。

    如果在nginx 服务器上想跑tomcat,当你配置了tomcat,你可能会用8080端口对tomcat进行访问,这样就会有点麻烦,nginx服务器是在80端口,tomcat在8080,怎么合并呢,可 ...

  6. nginx服务器部署dist文件夹

    Table of Contents generated with DocToc 一.tomcat部署的问题 二.centos服务器安装nginx 三.nginx配置 3.1 将dist文件夹上传到服务 ...

  7. Ubuntu下安装Nginx服务器并进行优化

    一.Nginx介绍   Nginx是由俄罗斯人开发的一款高性能的Web和反向代理服务器,它也可以作为电子邮件的反向代理服务器.其以稳定.并发能力强.占用资源少等显著特点备受广大互联网公司青睐. Ngi ...

  8. nginx学习--nginx下的gzip与vary、预压缩、缓存、反向代理的结合

    2019独角兽企业重金招聘Python工程师标准>>> 来自:nginx系列(十七)nginx下的gzip与vary.预压缩.缓存.反向代理的结合 介绍 在http的协议里,为了减少 ...

  9. Nginx服务器概述

    1 Nginx服务器概述 正向代理( Forward Proxy ):是一个位于客户端和原始服务器之间的服务器,为了从原始服务器取得内容, 客户端向代理发送一个请求并指定目标(原始服务器),然后代理向 ...

最新文章

  1. 名字就叫nfs-(network file system)
  2. Vue怎样新建并启动项目(图文教程详解)
  3. matlab 计算误码率,关于误码率的问题 急!!!!!
  4. 探索ASP.NET Core中的IStartupFilter
  5. 1389. 按既定顺序创建目标数组
  6. (function($){...})(jQuery) 含义
  7. Emulator 29.2.12 稳定版发布,启用 Google Maps UI
  8. brave浏览器_升华拜克股票行情:Brave推出适用于PC和移动设备的以隐私为中心的广告拦截浏览器v1.0...
  9. C#中virtual与abstract的区别
  10. chrome disable-web-security 关闭安全策略 解决跨域
  11. 车牌识别SDK原理分析
  12. 反射可以使用lambda吗_社保卡可以在外地使用吗?
  13. 如何实现emoji文本字数计算?以及输入框限制指定字符数?
  14. Pythonnbsp;实现LeNet网络模型的训练及预测
  15. 1-9九个数字组成一个九位数 如果从左边起取出1个数字,需要能被1整除,取出两个数字组成的数能被2整除,取出三个数字组成的数能被3整除,依次类推
  16. AD9361 介绍 (下)
  17. Java小白到到大佬路线
  18. linux的root用户默认密码,Linux下root初始密码设置方法
  19. 淘汰VBA,用InfoPath----InfoPath相关文章两三篇
  20. IP-guard双机热备使用指南

热门文章

  1. Django中的CBV视图
  2. org.springframework.scheduling.quartz.CronTriggerBean定时任务配置
  3. 局域网采用BT方式(P2P)传输大文件解决方案
  4. 2022-2028全球与中国扑克牌手机游戏市场现状及未来发展趋势
  5. 横排列表(li)的左右对齐
  6. 华盛顿邮报启用核查事实机器人,新闻行业路指何方
  7. 2020年,直播还是一门好生意吗?
  8. KEIL 下如何准确测量代码执行时间?
  9. mat2cell函数解析
  10. [SCOI2007]修车【最大流最小费用】