使用nginx进行反向代理

反向代理介绍代理分为正向代理和反向代理,正向代理可以这样举例:

我们要访问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用来进行权重划分,

你可能感兴趣的:(使用nginx进行反向代理)