(1).正向代理的观点

正向代理,也便是传说中的代理,他的事情事理就像一个跳板,大略的说,我是一个用户,我访问不了某网站,但是我能访问一个代理做事器,这个代理做事器 呢,他能访问那个我不能访问的网站,于是我先连上代理做事器,见告他我须要那个无法访问网站的内容,代理做事器去取回来,然后返回给我。
从网站的角度,只 在代理做事器来取内容的时候有一次记录,有时候并不知道是用户的要求,也隐蔽了用户的资料,这取决于代理告不见告网站。

结论便是,正向代理 是一个位于客户端和原始做事器(origin server)之间的做事器,为了从原始做事器取得内容,客户端向代理发送一个要求并指定目标(原始做事器),然后代理向原始做事器转交要求并将得到的内 容返回给客户端。
客户端必须要进行一些特殊的设置才能利用正向代理。

squid动态认证php晓桂科技Nginx 反向署理负载平衡squid页面缓存 jQuery

(2).反向代理的观点

连续举例:

例用户访问 http://www.cluster.com/readme,但www. cluster.com上并不存在readme页面,他是偷偷从其余一台做事器上取回来,然后作为自己的内容返回用户,但用户并不知情。
这里所提到的 www. cluster.com 这个域名对应的做事器就设置了反向代理功能。

结论便是,反向代理恰好相反,对付客户端而言它就像是原始做事器,并且客户端不须要进行任何特殊的设置。
客户端向反向代理的命名空间(name- space)中的内容发送普通要求,接着反向代理将判断向何处(原始做事器)转交要求,并将得到的内容返回给客户端,就像这些内容原来便是它自己的一样。

(3).两者差异

从用场上来讲:

正向代理的范例用场是为在防火墙内的局域网客户端供应访问Internet的路子。
正向代理还可以利用缓冲特性减少网络利用率。
反向代理的范例用场是将 防火墙后面的做事器供应给Internet用户访问。
反向代理还可以为后真个多台做事器供应负载平衡,或为后端较慢的做事器供应缓冲做事。
其余,反向代理 还可以启用高等URL策略和管理技能,从而使处于不同web做事器系统的web页面同时存在于同一个URL空间下。

从安全性来讲:

正向代理许可客户端通过它访问任意网站并且隐蔽客户端自身,因此你必须采纳安全方法以确保仅为经由授权的客户端供应做事。
反向代理对外都是透明的,访问者并不知道自己访问的是一个代理。

反向代理实例:

第一步,安装nginx

# useradd nginx--我这里建立一个用户来跑nginx,不做也可以,它默认是用daemon用户来跑

# id nginx--nginx的uid,gid不主要

uid=517(nginx) gid=518(nginx) groups=518(nginx)

# tar xf /opt/nginx-1.6.2.tar.gz -C /usr/src/ --解压

# cd /usr/src/nginx-1.6.2/

--编译并安装

# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_gzip_static_module --with-http_stub_status_module

# make && make install

-----------------------------------------------------------

如果在configure时报下面的错,表示默认利用了rewrite模块,须要用到pcre的库

./configure: error: the HTTP rewrite module requires the PCRE library.

You can either disable the module by using --without-http_rewrite_module

option, or install the PCRE library into the system, or build the PCRE library

statically from the source with nginx by using --with-pcre=<path> option.

办理方法:

第一种:

yum install pcre--安装系统自带的pcre库文件就可以了

第二种:

自己下载pcre的源码先编,再编译nginx用--with-pcre来指定pcre的安装路径就可以了

# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_gzip_static_module --with-http_stub_status_module --with-pcre=/usr/local

-----------------------------------------------------------------

--把稳:下面的例子,因此静态页面来做测试。

例一:利用前端nginx代理后面一台web

client

nginx 192.168.169.201

web1

192.168.169.200:8000

[root@li nginx]# cat conf/nginx.conf

user nginx nginx;

worker_processes 5;

error_log logs/error.log info;

pid logs/nginx.pid;

events {

use epoll;

worker_connections 65535;

}

http {

server {

listen 80;

server_name 192.168.169.201;

root /nginxroot/;

location /web1/ {

proxy_pass http://192.168.169.200:8000/;

}

}

}

# mkdir /nginxroot/

# echo \公众nginx main page\公众 > /nginxroot/index.html

--启动

# ulimit -SHn 65535

# /usr/local/nginx/sbin/nginx

--验证

找另一台客户端机器验证

# elinks 192.168.169.201--得到192.168.169.201上nginx的主页

# elinks 192.168.169.201/web1/--得到192.168.169.200上8000端口的web1主页

例二:利用前端nginx代理后端两台web,一个代理后台10的8000端口的web1,一个代理后台12的80端口的web2

nginx192.168.169.201:80

web1web2

192.168.169.200:8000192.168.169.202:80

# cat /usr/local/nginx/conf/nginx.conf

user nginx nginx;

worker_processes 5;

error_log logs/error.log info;

pid logs/nginx.pid;

events {

worker_connections 65535;

use epoll;

}

http {

server {

listen 80;

server_name 192.168.169.201;

root /nginxroot/;

location /web1/ {

proxy_pass http://192.168.169.200:8000/;

}

location /web2/ {

proxy_pass http://192.168.169.202/;

}

}

}

重启

[root@li nginx]# /usr/local/nginx/sbin/nginx -s stop

[root@li nginx]# /usr/local/nginx/sbin/nginx

验证

# elinks 192.168.169.201

# elinks 192.168.169.201/web1/

# elinks 192.168.169.201/web2/

例四:代理后端时利用负载均衡

# cat /usr/local/nginx/conf/nginx.conf

user nginx nginx;

worker_processes 5;

error_log logs/error.log info;

pid logs/nginx.pid;

events {

worker_connections 65535;

use epoll;

}

http {

upstream nginxweb {

#ip_hash; 调度算法

server 192.168.169.200:8000 weight=1 max_fails=2 fail_timeout=1s;

server 192.168.169.202:80 weight=1 max_fails=2 fail_timeout=1s;

}

server {

#listen 80;

#server_name 192.168.169.201;

#root /nginxroot/;

location / {

proxy_pass http://nginxweb;

}

}

}

--upstream指令不要加到http {} 表面,也不要加到server{}里面

重启 (省略)

验证 (省略)

--验证时,会创造客户端针对同一个URL的访问也会一次web1一次web2

1、upstream 是Nginx的HTTP Upstream模块,这个模块通过一个大略的调度算法来实现客户端IP到后端做事器的负载均衡。
在上面的设定中,通过upstream指令指定了一个负 载均衡器的名称test.net。
这个名称可以任意指定,在后面须要用到的地方直接调用即可。

2.upstream 支持的负载均衡算法

Nginx的负载均衡模块目前支持4种调度算法,下面进行分别先容,个中后两项属于第三方调度算法。

轮询(默认)。
每个要求按韶光顺序逐一分配到不同的后端做事器,如果后端某台做事器宕机,故障系统被自动剔除,利用户访问不受影响。
Weight 指定轮询权值,Weight值越大,分配到的访问机率越高,紧张用于后端每个做事器性能不均的情形下。

ip_hash。
每个要求按访问IP的hash结果分配,这样来自同一个IP的访客固定访问一个后端做事器,有效办理了动态网页存在的session共享问题。

fair。
这是比上面两个更加智能的负载均衡算法。
此种算法可以依据页面大小和加载韶光是非智能地进行负载均衡,也便是根据后端做事器的相应韶光来分配要求,相应时 间短的优先分配。
Nginx本身是不支持fair的,如果须要利用这种调度算法,必须下载Nginx的upstream_fair模块。

url_hash。
此方法按访问url的hash结果来分配要求,使每个url定向到同一个后端做事器,可以进一步提高后端缓存做事器的效率。
Nginx本身是不支持url_hash的,如果须要利用这种调度算法,必须安装Nginx 的hash软件包。

下午课:

利用squid缓存

=================================================================

client

|

| 192.168.169.201

nginx 反向代理

-----------

| | 命中 hit 直接返回

动态程序文件.php | |

| squid或varnish(web加速,缓存静态文件或图片)

直接找web | |

---- | 没命中 miss 找后端web去取

| | 192.168.169.202

lamp <---- |

或lnmp

192.168.169.200:8000

li.cluster.com

实验前准备:

1,相互都在/etc/hosts里加主机名和IP的对应

192.168.169.200 li.cluster.com

192.168.169.202 squid.cluster.com

192.168.169.201 nginx.cluster.com

2,韶光同步

rdate -s 192.168.169.200

3,关闭iptables和selinux

iptable -F

iptables -t nat -F

chkconfig iptables off

4, 配置好yum

第一大步:安装并配置后面的网站

在192.168.169.200上配置一个可用的lamp或lnmp,安装一个论坛(phpwind或discusz);

利用先前做的lamp或lnmp都可以

如果没有的话,须要再快速做一个的话,可以利用rpm版lamp

yum install mysql http php -y

我这里利用的是昨天课程安装的lnmp,用的是8000端口

第二大步:安装并配置squid

在192.168.169.202上安装squid,编译的版本或者rpm版都可以

这里为了省韶光,利用rpm版的squid

# yum install squid -y

配置squid主配置文件

# vim /etc/squid/squid.conf

http_access allow all--修正成许可所有

http_port 80 accel vhost vport--修正成监听80端口和支持反向代理模式

cache_dir ufs /var/spool/squid 256 16 256--打开缓存目录的定义这一句

cache_peer 192.168.169.200 parent 8000 0 no-query originserver round-robin name=web

cache_peer_domain web.cluster.com

cache_peer_domain web 192.168.169.201--加上这三句,表示代理后台的35的8000端口;web.cluster.com为网站的域名,192.168.169.201为我这个架构最前真个nginx的IP

创建缓存目录

# squid -zX /var/spool/squid

启动squid

# /etc/init.d/squid restart

第三大步;安装并配置nginx

在192.168.169.201上安装配置

安装过程参考本日课程上午的条记

配置nginx

[root@nginx ~]# vim /usr/local/nginx/conf/nginx.conf

user nginx nginx;

worker_processes 8;

error_log logs/error.log info;

pid logs/nginx.pid;

events {

worker_connections 65535;

use epoll;

}

http {

include mime.types;

default_type application/octet-stream;

log_format main '$remote_addr - $remote_user [$time_local] \公众$request\"大众 '

'$status $body_bytes_sent \"大众$http_referer\公众 '

'\公众$http_user_agent\"大众 \"大众$http_x_forwarded_for\"大众';

sendfile on;

tcp_nopush on;

keepalive_timeout 65;

gzip on;

upstream squid {

server 192.168.169.202 weight=1 max_fails=2 fail_timeout=30s;

}

upstream web {

server 192.168.169.200:8000 weight=1 max_fails=2 fail_timeout=30s;

}

server {

listen 80;

server_name 192.168.169.201;

access_log logs/host.access.log main;

location ~ .\.php$ {

proxy_pass http://web;

proxy_set_header Host $host;

proxy_set_header X-Forwarded-For $remote_addr;

}

location ~ .\.(html|htm|gif|jpeg|jpg|css|js|png|swf)$ {

proxy_pass http://squid;

proxy_set_header Host $host;

proxy_set_header X-Forwarded-For $remote_addr;

}

location / {

proxy_pass http://web;

proxy_set_header Host $host;

proxy_set_header X-Forwarded-For $remote_addr;

}

}

}

[root@nginx ~]# ulimit -SHn 65535

# /usr/local/nginx/sbin/nginx -s stop

# /usr/local/nginx/sbin/nginx

---------------------------------------------

第四大步:验证

再找一台机器做为客户端来验证

我这里为192.168.169.72

在192.168.169.72上首先绑定静态DNS(可以实现客户端用域名来访问,不绑定只要前面squid里配置OK,用IP访问也可以)

cat /etc/hosts

192.168.169.201 web.cluster.com --IP要为前端nginx的IP,名字为这个网站的域名要和squid里的cache_peer_domain web web.cluster.com要对应

1,用firefox访问http://192.168.169.201/是可以正常看到我在10的8000端口安装的phpwindV9版本的

2,利用下面的命令验证phpwind论坛的一个logo,可以看到在squid上命中的信息

# curl -I http://192.168.169.201/themes/site/default/images/logo.png

X-Cache: hit from squid.cluster.com

X-Cache-Lookup: HIT from squid.cluster.com:80

Via: 1.0 squid.cluster.com (squid/3.1.10)

3,关闭squid,在客户端用firefox访问,会创造全体网站都没有图片(静态的元素)

用curl -I http://192.168.169.201/themes/site/default/images/logo.png来验证也会报错

由于我的架构里只有一台squid,再次启动squid后,统统又规复正常

备:清理缓存

# /etc/init.d/squid stop

# rm /var/spool/squid/ -rf--手动这样删除缓存

# /etc/init.d/squid start