so true

心怀未来,开创未来!
随笔 - 160, 文章 - 0, 评论 - 40, 引用 - 0
数据加载中……

http代理的那些事

正向、反向都是A要访问一些只有C才能访问到的东西,中间通过C来中介;
1。区别:
正向:A告诉C,我要明确访问B,C把B上的资源拽回来,返回给A;对B而言,访问我的是C,压根不知道A的存在;在A看来,我需要显示的配置代理服务器C,要明确告诉C我要访问的资源是B;
反向:A告诉C,我要请求一些资源,C知道资源在B上,从B上把资源拽回来返回给A;对B而言,直接访问我的是C但同时也知道真正的资源请求者是A;在A看来,压根不知道B的存在,一直以为资源就是在C上;
总结:正向非常简单理解,就是委托C帮我访问,出了事也都是C兜着,C这里仅仅是一个傻傻的替人干活和顶雷的工具,说白了就是A在本地wget拽B的资源不行,但在C上wget是可以拽下来B的资源的(当然这里C也得是一个server进程,因为要侦听端口等待A来访问,还要返回结果给A);干反向代理的C不再是那么简单的一个工具了,而是一个真正意义上的service,可以综合考虑A的需求和B的服务能力来做智能转发,因此会具有负载均衡的能力(当然这里也可以使用最简化版的C,即:C也只是一股脑的单纯的把请求转发给B,在这种意义上,貌似感觉反向干的还是正向干的事,实则不然,关键在于B,对于正向而言B是一个特定的资源,例如B可以是https://www.zhihu.com/question/19761434,也可以是http://blog.csdn.net/physicsdandan/article/details/45667357;对于反向而言,B只能是一个或几个特定的服务地址,例如http://10.138.20.241:8834/,请求都是转给这一个或这几个特定服务地址的,当然这个特定服务地址也有可能又是proxy)
2。典型应用场景:
正向:翻到墙外去看片;
反向:把内网的资源暴露给外部访问;
3。能做代理的软件:
a. nginx:正反都可以,但不支持https;
b. 正向代理支持https的:http://www.oki-osk.jp/esc/python/proxy/TinyHTTPProxy-0.2.1.zip就一个python文件,最简单易用,已经测试过svn可以用它(配置下~/.subversion/servers里的[global]下的http-proxy-host和http-proxy-port就可以了),更多的参见https://www.zhihu.com/question/19871146;
4。一句话总结:
都是把http请求进行转发,调整几个header字段而已;反向代理主要干内网暴露和负载均衡这两件事;
最后附上nginx正反向代理的配置模板:
正向代理:
server { 
    resolver 8.8.8.8; 
    resolver_timeout 5s; 
    listen 8081; 
    location / { 
        proxy_pass $scheme://$http_host$request_uri; 
        proxy_set_header Host $http_host; 
        proxy_buffers 256 8k; 
        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; 
    } 
}
反向代理:
upstream apachephp  {
    server ip:8080;
}
server {
    listen 80;
    server_name www.myblog.cn;
    access_log  logs/quancha.access.log  main;
    error_log   logs/quancha.error.log;
    root        html;
    index       index.html index.htm index.php;
    ## send request back to apache ##
    location / {
        proxy_pass  http://apachephp;
        #Proxy Settings
        proxy_redirect             off;
        proxy_set_header           Host             $host:$server_port;
        proxy_set_header           X-Real-IP        $remote_addr;
                 proxy_set_header                             REMOTE-HOST           $remote_addr;
        proxy_set_header           X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_next_upstream        error timeout invalid_header http_500 http_502 http_503 http_504;
        proxy_max_temp_file_size   0;
        proxy_connect_timeout      90;
        proxy_send_timeout         90;
        proxy_read_timeout         90;
        proxy_buffer_size          4k;
        proxy_buffers              4 32k;
        proxy_busy_buffers_size    64k;
        proxy_temp_file_write_size 64k;
    }
}

posted on 2016-06-08 16:31 so true 阅读(238) 评论(0)  编辑  收藏 所属分类: Linux


只有注册用户登录后才能发表评论。


网站导航: