反向代理从传输上分可以分为2种:同步模式(apache-mod_proxy和squid) 异步模式(lighttpd 和 nginx)
同步传输:浏览器发起请求,而后请求会立刻被转到后台,于是在浏览器和后台之间就建立了一个通道。在请求发起直到请求完成,这条通道都是一直存在的。
异步传输:浏览器发起请求,请求不会立刻转到后台,而是将请求数据(header)先收到nginx上,然后nginx再把这个请求发到后端,后端处理完之后把数据返回到nginx上,nginx将数据流发到浏览器,这点和lighttpd有点不同,lighttpd是将后端数据完全接收后才发送到浏览器。
小结:apache和squid的反向会增加后端web的负担,因为每个用户请求都会在proxy上与后端server建立的长久链接,知道数据取完前,连接都不会消失。因为wan速度与lan速度的不同,虽然lan之间的速度是极度快的,但是用户的wan连接决定了这个时间长。而lighttpd和nginx的异步模式,是不管你用户要求的数据有多大,都是先收下来,再与后端联系,这是非常迅速的速度,所以proxy与后端连接时间也会很短,几十M的东西也是几秒内。后端不需要维护这么多连接。而lighttpd也和nginx不同的异步,lighttpd是先收完再转向客户浏览器,而nginx是边收数据边转向用户浏览器。
环境:
两台私网web服务器ip:192.168.1.12 静态html网页 ip:192.168.1.13 动态php网页
一台代理服务器私网ip:192.168.1.11 公网ip:202.106.0.1
一台公网客户ip:202.106.0.20
需求:
1:公网客户可以通过nginx代理服务器访问公司主页www.sw.com
2:nginx可以实现动态和静态网页分离访问不同web服务器
3:防防盗链
实现步骤:
1:服务器上安装nginx源码包程序,设置为开机启动,备份主配置文件
[[email protected] ~]# useradd -M -s /sbin/nologin nginx //添加系统用户nginx,无家目录和禁止登录
[[email protected] ~]#yum -y install gcc gcc-c++ make pcrc-devel openssl-devel //安装编译环境开发包
[[email protected] ~]#mkdir /nginx //创建存放文件夹
[[email protected] nginx-0.8.55]# ./configure --prefix=/nginx \ //转换源码,指定安装目录
>--user=nginx --group=nginx //指定进程属主,属组
>--with-http_stub_status_module --with-http_ssl_module; //加载查看状态模块,ssl模块
[[email protected] nginx-0.8.55]# make && make install //编译安装
[[email protected] ~]# vim /etc/rc.local //添加到开机启动脚本
/nginx/sbin/nginx
[[email protected] ~]# cp -p /nginx/conf/{nginx.conf,nginx.conf.bak} //备份主配置文件
2:配置主配置文件,重启服务
[[email protected] ~]# vim /nginx/conf/nginx.conf
... 3 worker_processes 1; //进程个数,建议和cpu核数相同 ... 12 events { 13 worker_connections 1024; //每进程最大并发连接数 14 } ... 17 http { ... 20 upstream web { //定义web地址池组 21 server 192.168.1.12:80 weight=4; //此台权重为4,轮询时访问比例为4:1 22 server 192.168.1.13:80; 23 ip_hash; //让同ip地址访问同一个web服务器 24 } ... 122 server { 123 listen 80; 124 server_name www.sw.com; 125 location / { 128 proxy_pass http://web; //调用web地址池 129 } 130 location ~* \.php$ { //当访问结尾是php时,代理到192.168.1.13 131 proxy_pass http://192.168.1.13; 132 client_max_body_size 10m; //允许客户端请求的最大单文件字节数 133 client_body_buffer_size 128k; //缓冲区代理缓冲用户端请求的最大字节数, 134 proxy_connect_timeout 90; //nginx跟后端服务器连接超时时间(代理连接超时) 135 proxy_send_timeout 90; //后端服务器数据回传时间(代理发送超时) 136 proxy_read_timeout 90; //连接成功后,后端服务器响应时间(代理接收超时) 137 proxy_buffer_size 4k; //设置代理服务器(nginx)保存用户头信息的缓冲区大小 138 proxy_buffers 4 32k; //proxy_buffers缓冲区,网页平均在32k以下的设置 139 proxy_busy_buffers_size 64k; //高负荷下缓冲大小(proxy_buffers*2) 140 proxy_temp_file_write_size 64k; //设定缓存大于这个值,将从upstream服务器传 141 } 142 location ~* \.(gif|png|jpg|mp3|rm|flv)$ { //防盗链,只允许本域直接访问 143 valid_referers none blocked .sw.com; 144 if ($invalid_referer) { rewrite ^/ http://192.168.1.11/error.htm;} 145 } 146 } ... 156 }
[[email protected] ~]#/nginx/sbin/nginx -s stop //停止服务
[[email protected] ~]#/nginx/sbin/nginx //启动服务