Php学习之nginx反向代理详解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Php学习之nginx反向代理详解相关的知识,希望对你有一定的参考价值。

本文和大家分享的主要是phpnginx反向代理相关内容,一起来看看吧,希望对大家学习php有所帮助。

一、概念理解

1.代理服务器

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

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

提高访问速度

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

防火墙作用

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

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

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

3.正向代理&反向代理

正向代理

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

反向代理

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

4.反向代理的应用

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

5.为什么使用nginx

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

二、准备工作

1.服务器

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

2.环境

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

3.搭建环境

这个东西要说的太多了,这里不一一叙述了。

三、服务器配置

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

1.编写测试文件

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

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


另外一台服务器同理

2.配置反向代理服务器

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

# vi nginx.conf 修改配置文件


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

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,B1/3,则访问A两次,访问B一次。

3.ip_hash

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

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

 

 

来源:博客园

以上是关于Php学习之nginx反向代理详解的主要内容,如果未能解决你的问题,请参考以下文章

nginx学习之反向代理负载均衡

nginx 学习之反向代理

nginx学习之反向代理

Nginx学习之反向代理WebSocket配置实例

Nginx详解(正向代理反向代理负载均衡原理)

nginx反向代理三种模式