反向代理介绍代理分为正向代理和反向代理,正向代理可以这样举例:
我们要访问google,发现访问不了,然后找一个代理服务器,我们把请求发给这个代理服务器,代理服务器转交我们的请求到google,google回数据的时候同样先将数据转发到代理服务器,代理服务器再将数据回给我们的client,这时候这个代理服务器就是正向代理。正向代理主要在中间搭建一个桥,引导我们到正确的资源上面去。
而反向代理恰恰相反,对方的服务器是我们访问的,可是资源并不在这台服务器上面,比如说我们访问百度,看到的是百度,其实百度将我们的请求提交给了后台我们不知道的服务器,我们以为访问的是百度,这些后面的服务器就是反向代理的结果,而这个百度就是反向代理服务器。
总结来说,正向代理就是在我们和资源中间添加一个桥梁,用来转发我们的额请求,而反向代理服务器是为我们访问的服务器分流。
使用nginx打造反向代理服务器
介绍一下搭建的背景:os:ubuntu,代理服务器 nginx,代理服务器的跑的server www.baidu.com(当然需要修改host啦)
达到的目的:当一个url指向自己的nginx ip时候能够将这个ip转向另外的ip(可以多个),而客户端ping的时候还是你的nginx的server
配置:
在enginx的conf文件中,
upstream hello{
server 192.168.68.43:8080 weight=1;
server 192.168.68.45:8080 weight=1;
}
先添加upstream,名字自己起,这里是hello,里面有想转向的server
然后再在location中添加:
proxy_pass http://hello; #在这里设置一个代理,和upstream的名字一样
#以下是一些反向代理的配置可删除
proxy_redirect off;
#后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m; #允许客户端请求的最大单文件字节数
client_body_buffer_size 128k; #缓冲区代理缓冲用户端请求的最大字节数
proxy_connect_timeout 300; #nginx跟后端服务器连接超时时间(代理连接超时)
proxy_send_timeout 300; #后端服务器数据回传时间(代理发送超时)
proxy_read_timeout 300; #连接成功后,后端服务器响应时间(代理接收超时)
proxy_buffer_size 4k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小
proxy_buffers 4 32k; #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2)
proxy_temp_file_write_size 64k; #设定缓存文件夹大小,大于这个值,将从upstream服务器传
最终效果图:
#负责压缩数据流
gzip on;
gzip_min_length 1000;
gzip_types text/plain text/css application/x-javascript;
#设定负载均衡的服务器列表
#weigth参数表示权值,权值越高被分配到的几率越大
upstream hello{
server 192.168.68.43:8080 weight=1;
server 192.168.68.45:8080 weight=1;
}
server {
#侦听的80端口
listen 80;
server_name localhost;
#设定查看Nginx状态的地址
location /nginxstatus{
stub_status on;
access_log on;
auth_basic "nginxstatus";
auth_basic_user_file htpasswd;
}
#匹配以jsp结尾的,tomcat的网页文件是以jsp结尾
location / {
index index.jsp;
proxy_pass http://hello; #在这里设置一个代理,和upstream的名字一样
#以下是一些反向代理的配置可删除
proxy_redirect off;
#后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m; #允许客户端请求的最大单文件字节数
client_body_buffer_size 128k; #缓冲区代理缓冲用户端请求的最大字节数
proxy_connect_timeout 300; #nginx跟后端服务器连接超时时间(代理连接超时)
proxy_send_timeout 300; #后端服务器数据回传时间(代理发送超时)
proxy_read_timeout 300; #连接成功后,后端服务器响应时间(代理接收超时)
proxy_buffer_size 4k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小
proxy_buffers 4 32k; #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2)
proxy_temp_file_write_size 64k; #设定缓存文件夹大小,大于这个值,将从upstream服务器传
}
}
然后重启nginx就行了。
访问这个nginx的服务器会被转到这两个hello的ip上面去,一方面实现了反向代理,另一方面还能实现负载均衡。
对于负载均衡的实现形式,可以在hello里面添加#ip_hash;
表示按照访问ip的hash来选取哪一个ip。默认是按照轮询进行,一个一个分配
weight用来进行权重划分,
网友评论
然后代理到 百度首页
我写的如下代码
server{
listen 80;
server_name localhost;
location /test {
rewrite ^/test$ / break;
proxy_set_header Host www.baidu.com;
proxy_pass http://www.baidu.com/;
}
}
总是出错,要怎样实现这种代理呢?求教》》》