正向代理 是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),而后代理向原始服务器转交请求并将得到的内容返回给客户端。客户端必需要进行一些特别的设置才能使用正向代理。
nginx
反向代理正好相反,对于客户端而言它就像是原始服务器,而且客户端不须要进行任何特别的设置。客户端向反向代理的命名空间(name-space)中的内容发送普通请求,接着反向代理将判断向何处(原始服务器)转交请求,并将得到的内容返回给客户端,就像这些内容本来就是它本身的同样。
简单的区别方法:正向代理就是咱们在浏览器能够设置的代理服务器,主动权在浏览者手里。好比咱们有时候要查阅一些资料,被国内墙掉了,这时候我能够在国外的服务器上搭建一个nginx正向代理服务器,而后咱们就能够经过浏览器设置代理服务器,来×××了。反向代理,是浏览者不知情的,服务器端本身假设的。算法
server{ vim
resolver 8.8.8.8; 后端
resolver_timeout 30s; api
listen 82; 浏览器
location / { 缓存
proxy_pass http://$http_host$request_uri; 服务器
proxy_set_header Host $http_host; 微信
proxy_buffers 256 4k; session
proxy_max_temp_file_size 0;
proxy_connect_timeout 30;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 301 1h;
proxy_cache_valid any 1m;
}
}
一、不能有hostname。
二、必须有resolver, 即dns,即上面的8.8.8.8,超时时间(30秒)可选。
三、配置正向代理参数,均是由 Nginx 变量组成。
[plain] view plain copy
proxy_pass $scheme://$host$request_uri;
proxy_set_header Host $http_host;
四、配置缓存大小,关闭磁盘缓存读写减小I/O,以及代理链接超时时间。
[plain] view plain copy
proxy_buffers 256 4k;
proxy_max_temp_file_size 0;
proxy_connect_timeout 30;
五、配置代理服务器 Http 状态缓存时间。
[plain] view plain copy
proxy_cache_valid 200 302 10m;
proxy_cache_valid 301 1h;
proxy_cache_valid any 1m;
配置好后,重启nginx,以浏览器为例,要使用这个代理服务器,则只需将浏览器代理设置为http://+服务器ip地址+:+82(82是刚刚设置的端口号)便可使用了。
下面是以负载均衡为例子的反向代理。
[plain] view plain copy
http {
# 省略了前面通常的配置,直接从负载均衡这里开始
# 设置地址池,后端3台服务器
upstream http_server_pool {
server 192.168.1.2:8080 weight=2 max_fails=2 fail_timeout=30s;
server 192.168.1.3:8080 weight=3 max_fails=2 fail_timeout=30s;
server 192.168.1.4:8080 weight=4 max_fails=2 fail_timeout=30s;
}
# 一个虚拟主机,用来反向代理http_server_pool这组服务器
server {
listen 80;
# 外网访问的域名
server_name www.test.com;
location / {
# 后端服务器返回500 503 404错误,自动请求转发到upstream池中另外一台服务器
proxy_next_upstream error timeout invalid_header http_500 http_503 http_404;
proxy_pass http://http_server_pool;
proxy_set_header Host www.test.com;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
access_log logs/www.test.com.access.log combined;
}
}
最简单的反向代理演示(在一台服务器上作代理服务器,将http请求转发到另外一台IIS服务器上,经过二级域名形式访问。)编辑vim nginx.conf
[plain] view plain copy
server {
listen 80;
server_name test.zhoumengkang.com;
location / {
proxy_pass http://121.199.**.*:80;
}
}
一、轮询(默认),
每一个请求按时间顺序逐一分配到不一样的后端服务器,若是后端服务器down掉,能自动剔除。
upstream bakend { server 192.168.0.14 weight=10; server 192.168.0.15 weight=10; server 192.168.0.16 down; server 192.168.0.17 backup; }123456
二、ip_hash,
每一个请求按访问ip的hash结果分配,这样每一个访客固定访问一个后端服务器,能够解决session的问题。
upstream bakend { ip_hash; server 192.168.0.14:88; server 192.168.0.15:80; }12345
三、fair(第三方),
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream backend { server server1; server server2; fair; }12345
四、url_hash(第三方)
按访问url的hash结果来分配请求,使每一个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
例:在upstream中加入hash语句,server语句中不能写入weight等其余的参数,hash_method是使用的hash算法
upstream backend { server squid1:3128; server squid2:3128; hash $request_uri; hash_method crc32; }123456