一、概念理解

  1.代理服务器

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

  2.为什么要使用代理服务器

  ①提高访问速度

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

  ②防火墙作用

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

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

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

  3.正向代理&反向代理

  ①正向代理

  正向代理,架设在客户机与目标主机之间,只用于代理内部网络对Internet的连接请求,客户机必须指定代理服务器,并将本来要直接发送到Web服务器上的http请求发送到代理服务器中。

  ②反向代理

  反向代理服务器架设在服务器端,通过缓冲经常被请求的页面来缓解服务器的工作量,将客户机请求转发给内部网络上的目标服务器;并将从服务器上得到的结果返回给Internet上请求连接的客户端,此时代理服务器与目标主机一起       对外表现为一个服务器。

  4.反向代理的应用

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

  5.为什么使用nginx

  nginx是一个轻量级、高性能的web server,他可以直接作为http server来代替apache,对PHP需要FastCGI处理器支持,还可以作为一个反向代理服务器来实现负载均衡。虽然apache的mod_proxy和mod_cache也可以实现对多台app server的反向代理和负载均衡,但是nginx在处理并发上有着很大的优势。

二、准备工作

  1.服务器

  因为我们要使用nginx反向代理服务器来达到一个负载均衡的效果,所以需要搭建至少三台服务器才可以模拟这个效果。我使用VMware搭建了三台虚拟机,系统是centos6.5.

  2.环境

  因为需要一台服务器来作为反向代理服务器,而且我是phper,所以反向代理服务器是linux+nginx+mysql+php。其余两台真实服务器是linux+apache+mysql+php,因为apache的性能比较稳定,模块多而且bug少相对于nginx          来说。

  3.搭建环境

  这个东西要说的太多了,这里不一一叙述了,我有两篇文章写了怎么搭建这两种环境,链接:

    LAMP  http://www.cnblogs.com/lina520/p/7240680.html

  LNMP  http://www.cnblogs.com/lina520/p/7240328.html

  //有什么问题可以下方留言,如果我会的尽力解决。

三、服务器配置  

   这是我在固定了虚拟机IP之后,然后用SecureCRT工具链接。35这台是反向代理服务器,36,37是两台真实服务器。

  1.编写测试文件

  #cd  var/www/html;#这里是默认web目录,根据自己实际情况编写可访问的一个php文件

  #vi index.php#这里可以随便写点东西,但是要区分开另一台服务器

  

  另外一台服务器同理

  

 2.配置反向代理服务器

  #cd etc/nginx#跳转到nginx的配置页面

   #vi nginx.conf修改配置文件

  

  我们在http模块下增加如下配置,主要是一个upstream和server   

  upstream blance {
    server 192.168.0.36:80; //A服务器
    server 192.168.0.37:80; //B服务器
  }

  

  server{
    listen 80;//真实服务器的端口号
    server_name blance;//这个名字就是我们访问反向代理服务器的域名,注意与上面的服务器集群名一致
    location / {
      proxy_pass http://blance;//这个与上面同理
      proxy_set_header Host $host;//转发请求的头部
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
  }

  3.配置访问域名

  因为是测试,所以没有虚拟域名,但是可以自己制造一个。我的物理机是windows的系统,打开C:\Windows\System32\drivers\etc然后编辑hosts文件,在文件的末端把你想要请求的域名添加进去

  

  保存之后,退出打开浏览器访问这个域名,结果如下:

  

  

四、负载均衡策略

  1.RR策略

   就是我们通常说的轮询策略,每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。

   

  

  2.加权策略

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

   

  只要修改upstream就好了,服务器就会按照权重去访问。如上述配置,A服务器访问的几率是2/3,B是1/3,则访问A两次,访问B一次。

  3.ip_hash

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

  

  采用了ip_hash策略之后会针对每个访问的ip固定一个后端服务器,就不会再去访问其他服务器,在会话保持的时候,可以解决session的问题

  上面只写了几种常用的东西,还有很多我不知道的、没写的欢迎大家一起交流!

  

  

  

php nginx反向代理的更多相关文章

  1. 使用python自动生成docker nginx反向代理配置

    由于在测试环境上用docker部署了多个应用,而且他们的端口有的相同,有的又不相同,数量也比较多,在使用jenkins发版本的时候,不好配置,于是想要写一个脚本,能在docker 容器创建.停止的时候 ...

  2. Nginx反向代理,负载均衡,redis session共享,keepalived高可用

    相关知识自行搜索,直接上干货... 使用的资源: nginx主服务器一台,nginx备服务器一台,使用keepalived进行宕机切换. tomcat服务器两台,由nginx进行反向代理和负载均衡,此 ...

  3. Nginx反向代理部署指南

    一.反向代理 我们都知道,80端口是web服务的默认端口,其他主机访问web服务器也是默认和80端口进行web交互,而一台服务器也只有一个80端口,这是约定俗成的标准. 我们来看下面两个场景: 1.服 ...

  4. Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解

    转载:http://freeloda.blog.51cto.com/2033581/1288553 大纲 一.前言 二.环境准备 三.安装与配置Nginx 四.Nginx之反向代理 五.Nginx之负 ...

  5. Nginx反向代理和负载均衡

    一.Nginx反向代理设置 从80端口转向其他端口反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的 ...

  6. nginx 反向代理

    nginx 反向代理 vim nginx.conf http { ..... upstream "tomcatweb" { server 172.30.13.199:8080; s ...

  7. 关于nginx反向代理后获取不到客户端的真实ip地址问题

    前段时间在我的网站上用nginx做了一下反向代理,最近发现不能获取客户端ip了,都是拿到的127.0.0.1的本地ip... 通过查资料后,再去看了看我的配置文件,结果发现我没有如下配置: nginx ...

  8. Nginx反向代理配置可跨域

    由于业务需要,同一项目中的前端代码放在静态环境中,而后端代码放在tomcat中,但此时问题却出现了:前端使用ajax请求后端获取数据时出现如下报错 XMLHttpRequest cannot load ...

  9. Nginx反向代理搭建配置

    1.反向代理方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将服务器上得到的结果返回给internet 上请求连接的客户端,此时代理服务器对外就表现为一个 ...

  10. nginx反向代理docker registry报”blob upload unknown"解决办法

    问题症状:keepalived+nginx反向代理后端docker registry群集时,使用docker客户机向registry push镜像时出现 "blob upload unkno ...

随机推荐

  1. scrapy设置"请求池"

    scrapy设置"请求池" 引言 相信大家有时候爬虫发出请求的时候会被ban,返回的是403错误,这个就是请求头的问题,其实在python发出请求时,使用的是默认的自己的请求头,网 ...

  2. Ipython 自动重载

    一. 使用示例 In [1]: %load_ext autoreload In [2]: %autoreload 2 # Reload all modules (except those exclud ...

  3. 轻松Angularjs实现表格按指定列排序

    angular表格点击序号进行升序,再次点击进行降序排序,在输入框输入信息,出现相对应数据的那一行. html: <input type="text" ng-model=&q ...

  4. Spring boot 1: 使用IDEA创建Spring boot项目

    项目用到的环境: Windows 10 JDK8 IntelliJ IDEA 2017.1.3 Apache Tomcat 8 Maven 3.3.3 使用IDEA新建spring boot项目 新建 ...

  5. Discuz添加自定义模板广告

    在做Discuz中广告的时候碰到个大问题,现在我需要做一个轮播的通屏广告位,调用广告图片的代码应该是以下代码:<ul>     <li style="background: ...

  6. MySQL各模块工作配合

    MySQL各模块工作配合 在了解了 MySQL 的各个模块之后,我们再看看 MySQL 各个模块间是如何相互协同工作的 .接下来,我们通过启动 MySQL,客户端连接,请求 query,得到返回结果, ...

  7. Itunes制作手机铃声,图文版

    一.下载歌曲,选择歌曲用itunes打开,打开出现下面界面 二.设置歌曲 右键点击歌曲,找到显示简介,点击选项,截取音乐,出现下图: 截取你喜欢的部分,点击确定 点击确定后,选中该歌曲,找到左上方 文 ...

  8. JavaScript对象属性访问的两种方式

    JavaScript对象属性访问的两种方式 object.attribute object["attribute"] 例如: var employees = [ { "f ...

  9. WCF学习——构建第二个WCF应用程序(六)

    一.创建客户端应用程序 若要创建客户端应用程序,你将另外添加一个项目,添加对该项目的服务引用,配置数据源,并创建一个用户界面以显示服务中的数据.若要创建客户端应用程序,你将另外添加一个项目,添加对该项 ...

  10. Spring 极速集成注解 redis 实录

    Redis 做为基于内存的 Key-Value 数据库,用来做缓存服务器性价比相当高. 官方推出的面向 Java 的 Client Jedis,提供了很多接口和方法,可以让 Java 操作使用 Red ...