## Nginx 反向代理。
(一)简介
一、什么是代理服务器
客户机原本发送给服务器的请求,不会直接发送给服务器,而是先发送给代理服务器;经过代理服务器处理后转发给服务器;服务器数据处理后转回给代理服务器,代理服务器再返回给客户机的一个过程。
二、代理服务器的作用
1. 防火墙作用
由于所有的客户机请求都必须通过代理服务器访问远程站点,因此可在代理服务器上设限,过滤某些不安全信息;
2. 提高Web访问速度
可以缓存真实Web服务器上的某些静态资源,减轻真实Web服务器的负载压力;
3. 实现负载均衡
内部可以采用多台服务器来组成服务器集群,外部还是可以采用一个地址访问;
(二)架构思路
一、架构图
先来分析这张图:
1. 用户会访问 “10.167.167.167(默认80端口)” 。
2. Nginx收到 PC 端的HTTP请求。
3. Nginx根据配置将请求负载到 三台Apache的机子上去。
4. Apache服务器将数据处理后返回给Nginx。
5. Nginx将数据返回PC
(二)看完以上的分析后,可能大家有会几个问题:
1. 为什么使用Nginx做代理服务器?
a) 轻量级,同样起web 服务,比apache 占用更少的内存及资源;
b) 非阻塞、高并发连接:数据复制时,磁盘I/O的第一阶段是非阻塞的。官方测试能够支撑5万并发连接,在实际生产环境中跑到2~3万并发连接数;
2. 为什么使用Apache后台服务器?
a) rewrite ,比nginx 的rewrite 强大;
b) 少bug ,nginx 的bug 相对较多;
c) 稳定
三、架构实战
(一) Nginx、Apache 安装
1. http://www.cnblogs.com/bluebirds/p/6386649.html (这是之前讲到的在window安装nginx的案例, Linux也很简单,这里就不做多讲了)
(二)Nginx配置
1. Nginx.conf
进程数与每个进程的最大连接数
Nginx进程数,建议设置为等于CPU总核心数
单个进程最大连接数,那么该服务器的最大连接数 = 连接数 * 进程数
#user apache; worker_processes 4; # 工作进程的个数 events { use epoll; worker_connections 1024; # 单个进程的连接数 } http { # 服务器集群(Apache) weight 分配权重 权重越大 分配概率越高. upstream php_pool{ server 192.168.10.101:8080 max_fails=0 fail_timeout=30s weight=1; server 192.168.10.102:8080 max_fails=0 fail_timeout=30s weight=1; server 192.168.10.103:8080 max_fails=0 fail_timeout=30s weight=2; } }
server { listen 80; server_name www.test.com; # 域名 本地 access_log /data/www/logs/nginx_log/access/www.test.com_access.log main ; error_log /data/www/logs/nginx_log/error/www.test.com_error.log ; root /data/www/vhosts/www.test.com/httpdocs ; index index.html index.php; error_page 404 403 /404.html; location ~ .php$ { proxy_pass http://php_pool; # 服务集群池 include proxy_params; expires -1; } location / { include proxy_params; if (!-d $request_filename){ set $flag 1$flag; } if (!-f $request_filename){ set $flag 2$flag; } if ($flag = "21"){ proxy_pass http://php_pool; expires -1; } } }
以上就是 反向代理的配置,只要理解服务的访问过程及原理,应该是不难的。
四、学习总结
本章借助Nginx 和 Apache 搭建了反向代理服务器,实在的基本的负载均衡。
在目前大多数的应用中,都会将Nginx部署在Linux服务器中,并且会做一些针对负载均衡的优化配置;
经过这次也更加深入的了解了 Nginx 和 Apache 服务配置两种服务的优缺点,能够更准确的在场景中运用。