美文网首页后端
使用nginx进行反向代理

使用nginx进行反向代理

作者: Daniel_adu | 来源:发表于2017-05-08 19:32 被阅读119次

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

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

    相关文章

      网友评论

      • 北海小盗:求教,我想实现 访问 127.0.0.1/test
        然后代理到 百度首页
        我写的如下代码
        server{
        listen 80;
        server_name localhost;
        location /test {
        rewrite ^/test$ / break;
        proxy_set_header Host www.baidu.com;
        proxy_pass http://www.baidu.com/;

        }
        }

        总是出错,要怎样实现这种代理呢?求教》》》
        Daniel_adu:@北海小盗 按照配置来说没有问题,看下日志,看看是不是哪里出问题了。

      本文标题:使用nginx进行反向代理

      本文链接:https://www.haomeiwen.com/subject/bwrvtxtx.html