问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
你好,欢迎来到懂视!登录注册
当前位置: 首页 - 正文

为什么要用nginx来做反向代理

发布网友 发布时间:2022-03-20 21:25

我来回答

1个回答

热心网友 时间:2022-03-20 22:55

  nginx 这个轻量级、高性能的 web server 主要可以干两件事情:

  〉直接作为http server(代替apache,对PHP需要FastCGI处理器支持);
  〉另外一个功能就是作为反向代理服务器实现负载均衡

  以下我们就来举例说明如何使用 nginx 实现负载均衡。因为nginx在处理并发方面的优势,现在这个应用非常常见。当然了Apache的 mod_proxy和mod_cache结合使用也可以实现对多台app server的反向代理和负载均衡,但是在并发处理方面apache还是没有 nginx擅长。

  1)环境:

  a. 我们本地是Windows系统,然后使用VirutalBox安装一个虚拟的Linux系统。
  在本地的Windows系统上分别安装nginx(侦听8080端口)和apache(侦听80端口)。在虚拟的Linux系统上安装apache(侦听80端口)。
  这样我们相当于拥有了1台nginx在前端作为反向代理服务器;后面有2台apache作为应用程序服务器(可以看作是小型的server cluster。;-) );

  b. nginx用来作为反向代理服务器,放置到两台apache之前,作为用户访问的入口;
  nginx仅仅处理静态页面,动态的页面(php请求)统统都交付给后台的两台apache来处理。
  也就是说,可以把我们网站的静态页面或者文件放置到nginx的目录下;动态的页面和数据库访问都保留到后台的apache服务器上。

  c. 如下介绍两种方法实现server cluster的负载均衡。
  我们假设前端nginx(为127.0.0.1:80)仅仅包含一个静态页面index.html;
  后台的两个apache服务器(分别为localhost:80和158.37.70.143:80),一台根目录放置phpMyAdmin文件夹和test.php(里面测试代码为print “server1“;),另一台根目录仅仅放置一个test.php(里面测试代码为 print “server2“;)。

  2)针对不同请求 的负载均衡:

  a. 在最简单地构建反向代理的时候 (nginx仅仅处理静态不处理动态内容,动态内容交给后台的apache server来处理),我们具体的设置为:在nginx.conf中修改:
  复制代码 代码如下:

  location ~ \.php$ {
  proxy_pass 158.37.70.143:80 ;
  }

  〉 这样当客户端访问localhost:8080/index.html的时候,前端的nginx会自动进行响应;
  〉当用户访问localhost:8080/test.php的时候(这个时候nginx目录下根本就没有该文件),但是通过上面的设置 location ~ \.php$(表示正则表达式匹配以.php结尾的文件,详情参看location是如何定义和匹配的 http://wiki.nginx.org/NginxHttpCoreMole) ,nginx服务器会自动pass给 158.37.70.143的apache服务器了。该服务器下的test.php就会被自动解析,然后将html的结果页面返回给nginx,然后 nginx进行显示(如果nginx使用memcached模块或者squid还可以支持缓存),输出结果为打印server2。

  如上是最为简单的使用nginx做为反向代理服务器的例子;

  b. 我们现在对如上例子进行扩展,使其支持如上的两台服务器。
  我们设置nginx.conf的server模块部分,将对应部分修改为:
  复制代码 代码如下:

  location ^~ /phpMyAdmin/ {
  proxy_pass 127.0.0.1:80 ;
  }
  location ~ \.php$ {
  proxy_pass 158.37.70.143:80 ;
  }

  上面第一个部分location ^~ /phpMyAdmin/,表示不使用正则表达式匹配(^~),而是直接匹配,也就是如果客户端访问的 URL是以http://localhost:8080/phpMyAdmin/ 开头的话(本地的nginx目录下根本没有phpMyAdmin目录),nginx会自动pass到127.0.0.1:80 的Apache服务器,该服务器对phpMyAdmin目录下的页面进行解析,然后将结果发送给nginx,后者显示;
  如果客户端访问URL是http://localhost/test.php 的话,则会被pass到158.37.70.143:80 的apache进行处理。

  因此综上,我们实现了针对不同请求的负载均衡。
  〉如果用户访问静态页面index.html,最前端的nginx直接进行响应;
  〉如果用户访问test.php页面的话,158.37.70.143:80 的Apache进行响应;
  〉如果用户访问目录phpMyAdmin下的页面的话,127.0.0.1:80 的Apache进行响应;

  3)访问同一页面 的负载均衡:
  即用户访问http://localhost:8080/test.php 这个同一页面的时候,我们实现两台服务器的负载均衡 (实际情况中,这两个服务器上的数据要求同步一致,这里我们分别定义了打印server1和server2是为了进行辨认区别)。

  a. 现在我们的情况是在windows下nginx是localhost侦听8080端口;
  两台apache,一台是127.0.0.1:80(包含test.php页面但是打印server1),另一台是虚拟机的158.37.70.143:80(包含test.php页面但是打印server2)。

  b. 因此重新配置nginx.conf为:
  〉首先在nginx的配置文件nginx.conf的http模块中添加,服务器集群server cluster(我们这里是两台)的定义:
  复制代码 代码如下:

  upstream myCluster {
  server 127.0.0.1:80 ;
  server 158.37.70.143:80 ;
  }

  表示这个server cluster包含2台服务器
  〉然后在server模块中定义,负载均衡:
  复制代码 代码如下:

  location ~ \.php$ {
  proxy_pass http://myCluster ; #这里的名字和上面的cluster的名字相同
  proxy_redirect off;
  proxy_set_header Host $host;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }

  这样的话,如果访问http://localhost:8080/test.php 页面的话,nginx目录下根本没有该文件,但是它会自动将其pass到myCluster定义的服务区机群中,分别由127.0.0.1:80;或者158.37.70.143:80;来做处理。
  上面在定义upstream的时候每个server之后没有定义权重,表示两者均衡;如果希望某个更多响应的话例如:
  复制代码 代码如下:

  upstream myCluster {
  server 127.0.0.1:80 weight=5;
  server 158.37.70.143:80 ;
  }

  这样表示5/6的几率访问第一个server,1/6访问第二个。另外还可以定义max_fails和fail_timeout等参数。

  综上,我们使用nginx的反向代理服务器reverse proxy server的功能,将其布置到多台apache server的前端。
  nginx仅仅用来处理静态页面响应和动态请求的代理pass,后台的apache server作为app server来对前台pass过来的动态页面进行处理并返回给nginx。

  通过以上的架构,我们可以实现nginx和多台apache构成的机群cluster的负载均衡。
  两种均衡:
  1)可以在nginx中定义访问不同的内容,代理到不同的后台server; 如上例子中的访问phpMyAdmin目录代理到第一台server上;访问test.php代理到第二台server上;
  2)可以在nginx中定义访问同一页面,均衡 (当然如果服务器性能不同可以定义权重来均衡)地代理到不同的后台server上。 如上的例子访问test.php页面,会均衡地代理到server1或者server2上。
  实际应用中,server1和server2上分别保留相同的app程序和数据,需要考虑两者的数据同步。
nginx反向代理 是什么意思?

总的来说,Nginx反向代理可以在保证服务器性能和可靠性的前提下,对外提供更为安全的访问方式。其使用方便、部署简单、可扩展性高等优点,使得Nginx反向代理成为了当下广泛应用的代理服务器之一。

socks5 代理软件 - StormProxies

StormProxies是全球大数据IP资源服务商,其住宅代理网络由真实的家庭住宅IP组成,可为企业或个人提供满足各种场景的代理产品。点击免费测试(注册即送1G流量)StormProxies有哪些优势?1、IP+端口提取形式,不限带宽,IP纯净高匿;2、覆盖全球20...

为什么要用Nginx反向代理

用Nginx反向代理是为了不让客户端知道真正访问的服务器地址是多少,以防止暴露服务器信息让服务器变的不安全。当然也有其它的功能,如网站的动静分离,可以加快客户端的访问效率。

nginx反向代理原理?

nginx反向代理的反向性在于:Nginx作为负载均衡服务时Nginx既可以在内部直接支持Rails和PHP程序对外进行服务,也可以支持作为HTTP代理服务对外进行服务。反向代理的方向与正向代理相反,代表外部网络用户向内部服务器发出请求,即接收来自Internet上用户的连接请求,并将这些请求转发给内部网络上的服务器,然后将从...

借助Nginx搭建反向代理服务器

1.2 反向代理的作用 ①保护网站安全:所有来自Internet的请求必须先通过代理服务器;②缓存静态资源加速Web请求:可以缓存真实服务器上的静态资源,减轻真实服务器的负载;③实现负载均衡:平衡集群中服务器的负载压力。二、初识Nginx:简单却不平凡 2.1 Nginx是什么? Nginx是一款轻量级的Web服务器、反向代...

为什么要用nginx来做反向代理

〉直接作为http server(代替apache,对PHP需要FastCGI处理器支持);〉另外一个功能就是作为反向代理服务器实现负载均衡 以下我们就来举例说明如何使用 nginx 实现负载均衡。因为nginx在处理并发方面的优势,现在这个应用非常常见。当然了Apache的 mod_proxy和mod_cache结合使用也可以实现对多台app server的反向...

nginx有什么用

Nginx作为一个Web服务器,具有以下主要作用:1. 静态资源处理:Nginx可以作为静态资源的服务器,如图片、HTML、CSS等文件的服务器。它具备极高的性能,能够在高并发场景下保持优秀的响应速度和处理能力。2. 反向代理:Nginx经常作为反向代理服务器使用,能够处理来自客户端的请求并将这些请求转发到后端的应用...

nginx正向代理反向代理(nginx正向代理反向代理什么意思)

首先,正向代理就像一个隐形的向导,当你访问外部网站时,nginx充当中间人,你的请求先经过它,再由它转发到目标服务器,目标服务器只看到代理服务器,而不知道实际用户。这种代理常用于翻墙访问国外资源。举例来说,你无法直接访问国外网站,这时nginx正向代理就能派上用场。反向代理则是nginx的另一种角色...

请教问题nginx反向代理proxy

反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。 Nginx搭建反向代理服务器过程详解 从上图可以看出:反向代理服务器位于网站机房,代理网站Web服务器接收Htt...

nginx反向代理 好处

总的来说,反向代理是在提高网站的稳定性、服务效率、服务质量。我们使用nginx的反向代理服务器reverse proxy server的功能,将其布置到多台apache server的前端。nginx仅仅用来处理静态页面响应和动态请求的代理pass,后台的apache server作为app server来对前台pass过来的动态页面进行处理并返回给nginx。通过...

nginx反向代理配置详解

反向代理有以下优点:1、可以起到保护网站安全的作用,因为任何来自Internet的请求都必须先经过代理服务器。2、通过缓存静态资源,加速Web请求。3、实现负载均衡。顺便说下,目前市面上,主流的负载均衡方案,硬件设备有F5,软件方案有四层负载均衡的LVS,七层负载均衡的Nginx、Haproxy等。

声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com
excel中区域A1:A10,求A1到n1的和,n为可变的数或者函数,怎样设置sum函... 顾客满意度指数编写测评报告 梦见我吃过了的东西给了死去的爷爷吃了是什么情况 复仇者联盟3无限战争中文字母的高清完整版 谁有复仇者联盟3高清云盘资源,不要去微信公众号的(我没有装微信),谢谢... 希望给孩子买一款好的护眼灯。在飞利浦和松下拿不定主意,请问用过的朋... 聚众淫乱罪立案标准是什么? 中华人民共和国刑事诉讼法,第一百六十条,应该怎么除法 QQ密码忘了 怎么找能知道 梦见猴子不停的追我,然后追到我,把我抱楼顶上,我弟来救我,我就跳楼顶... 2021抖音直播怎么查大哥消费 抖音可以看消费记录么? 抖音怎么查年度账单 Linux nginx安装目录找不到? 照片怎么用抖音视频制作是传快手 apache和nginx在原理上有什么不同? nginx和apache作为webserver的区别 浅谈apache和nginx的rewrite的区别 Linux下安装apache成功,但启动时说找不到配置文件httpd.conf linux apache 怎么安装rtmp linux中安装apache,make不成功. PPT艺术字转换中的波浪形在哪里设置 linux 安装apache 出现错误: Linux编译安装apache httpd2.4 make报错 怎么往电子邮箱发照片?设置电子邮件怎么填啊? 手机里的照片怎么到手机邮箱里?怎么弄?说得具体点 linux apache 安装为什么失败 linuxapache-tomcat怎么安装 linux 是否安装apache 怎么判断 华为怎么设置微信定时发消息 抖音怎么查看别人刷了多少钱? 抖音查大哥消费软件 抖音上的聊天记录怎么查找 linux中查看硬盘分区信息的命令是什么? Linux 中如何用命令直接修改分区ID linux下如何访问其它分区?包括linux 分区和windows分区。 在linux系统中下列哪个命令可用来建立分区 qq可以同时和两个人一起听歌吗 怎么删除linux分区 linux系统怎么分区呀?? word的兼容模式怎么去除 Linux里面nginx和httpd区别是什么? 阿里云 nginx apache选哪个 Nginx怎么安装配置 php和nginx安装后怎么配置 nginx怎么配置 Nginx Web服务器成功安装和工作,需要进一步配置,那要怎么配置呀? linux nginx 用什么用户安装 我手机里面朋友圈视频怎么删不掉 如何用nginx.conf配置nginx
  • 焦点

最新推荐

猜你喜欢

热门推荐