反向代理

正向代理,也就是传说中的代理,他的工作原理就像一个跳板,简单的说,我是一个用户,我访问不了某网站,但是我能访问一个代理服务器,这个代理服务器呢,他能访问那个我不能访问的网站,于是我先连上代理服务器,告诉他我需要那个无法访问网站的内容,代理服务器去取回来,然后返回给我。 从网站的角度,只在代理服务器来取内容的时候有一次记录,有时候并不知道是用户的请求,也隐藏了用户的资料,这取决于代理告不告诉网站。结论就是,正向代理 是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。

反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。

从用途上来讲:

   正向代理的典型用途是为在防火墙内的局域网客户端提供访问Internet的途径。
   正向代理还可以使用缓冲特性减少网络使用率。反向代理的典型用途是将防火墙后面的服务器提供给Internet用户访问。
   反向代理还可以为后端的多台服务器提供负载平衡,或为后端较慢的服务器提供缓冲服务。
   另外,反向代理还可以启用高级URL策略和管理技术,从而使处于不同web服务器系统的web页面同时存在于同一个URL空间下。

反向代理服务器的基本配置

  1. proxy_pass

     proxy_pass URL;
        配置块 location if
        此配置将当前请求代理到URL参数指定的服务器上,URL可以是主机名或者IP地址加PORT的形式
        proxy_pass http://localhost:8000;
        也可以结合负载均衡实用<负载均衡会说明这种情况>
        也可以吧HTTP转换成HTTPS
        proxy_pass http://192.168.0.1;
        默认情况反向代理不转发请求中的Host头部,如果需呀设置抓发头部
            则 proxy_set_header Host $host;
    
  2. proxy_method

        proxy_method method_name;
        配置块 http server location
        此配置项表示转发时的协议方法名:
            proxy_method POST;
        那么客户端发来的GET请求在转发时方法改为POST;
    
  3. proxy_hide_header

        proxy_hide_header header1;
        配置块 http server location;
        Nginx会将上游服务器的响应转发给客户端,但默认不转发HTTP头部字段(Date Server X-Pad X-Accel-* )
        使用proxy_hide_header可以指定任意头部不能被转发
        proxy_hide_header Cache-Control;
        proxy_hide_header MicrosoftOfficeWebServer;
    
  4. proxy_pass_header

        proxy_pass_header header1;
        配置块 http server location
        功能与 proxy_hide_header相反,是设置哪些头部允许转发.
        proxy_pass_header X-Accel-Redirect;
    
  5. proxy_pass_request_body

        proxy_pass_request_body off|on;
        默认 on
        配置块 http server location;
        确定上游服务器是否向上游服务器转发HTTP包体
    
  6. proxy_pass_request_header

        proxy_pass_request_header on | off;
        默认on
        配置块 http server location
        确定是否转发HTTP头部
    
  7. proxy_redirect

        proxy_redirect [default | off |redirect |replacement]
        默认default
        配置块 http server location
        当上游服务响应时重定向或刷新(HTTP 301 302),proxy_redirect可以重设HTTP头部的location或refresh字段
    
        proxy_redirect http://locahost:8000/two/ http://frontend/one/;
        上游响应302,location是URI是http://locahost:8000/two/some/uri/
        那是实际转发给客户端的是 http://frontend/one/some/uri/;
        可以使用前面提到的ngx_http_core_module模块提供的变量 
        proxy_redirect http://locahost:8000/two/ http://$host:server_port/;
        可以省略replacement参数的主机名部分,这时候用虚拟主机名填充
        proxy_redirect http://locahost:8000/two/ /one/;
    
        使用off参数的时候,将使location和refresh的字段维持不变
        proxy_redirect off;
    
        如果使用的 proxy_redirect default;
        下面两种配置是等效的
            location /{
                proxy_pass http://upstream:port/two/;
                proxy_redirect default;
            }
            location /{
                proxy_pass http://upstream:port/two/;
                proxy_redirect http://upstream:port/two/ /one/;
            }
    
  8. proxy_next_upstream

        proxy_next_upstream [error |timeout |invalid_header |http_500 |http_502~504 |http_404 | off]
        默认 proxy_next_upstream error timeout;
        配置块 http server location
    
        此配置表示上游一台服务器转发请求出现错误时,继续换一套服务器处理这个请求
        其参数用来说明在那些情况下继续选择下一台上游服务器转发请求.
        error 向上游发起连接 发送请求 读取响应时出错
        timeout 发送请求或读取响应时出错
        invalid_header 上游服务器发送的响应时不合法
        http_500 上游响应500
        http_502 上游响应502
        http_503 上游响应503
        http_504 上游响应504
        http_404 上游响应404
        off      关闭proxy_next_upstream功能 只要一出错就选择另外一台上游再次出发
    Nginx反向代理模块中还提供很多配置,如设置连接的超时时间,临时文件如何存储,如何缓存上游服务器响应等功能.
    

可以通过阅读 ngx_http_proxy_module了解更多详细情况

#sudo vim /usr/local/nginx/conf/nginx.conf 

            server {
                listen       80;
                server_name  localhost;
                location / {
                #保证代理机器能访问到 下面的机器并装有nginx  在主机号为100的机器上有响应网页
                proxy_pass http://192.168.1.100;
                root   html;
                index  index.html index.htm;
                }
            }
            sudo /usr/local/nginx/sbin/nginx -s reload

加一些判断条件 获取到 对方请求的主机 防止别人代理到自己的主机上

results matching ""

    No results matching ""