反向代理(Apache、Nginx)解决JS跨域问题

写在前面

之前介绍了JSONP的跨域方式,那是利用前端方案解决跨域问题。跨域问题也可以用后端方案解决,比如CORS(Cross-Origin-Resource-Shares)、方向代理等。今天介绍下反向代理如何解决跨域问题。
关于跨域:http://www.sundabao.com/利用JSONP解决跨域问题/
Apache和Nginx都可以实现反向代理,下面分别介绍下Apache和Nginx如何通过反向代理解决跨域问题。

Apache

Apache mod_proxy模块实现了代理/网关的功能,他实现了以下协议的代理-FTP、CONNECT(用于SSL)、HTTP0.9、HTTP1.0、HTTP1.1。此模块经过配置后可以通过以上协议或其它协议连接其它代理模块。

1、安装Apache Proxy_Http Server

vi /path/to/http.conf
//去调下面俩行的注释(#)
#LoadModule proxy_module modules/mod_proxy.so
#LoadModule proxy_http_module modules/mod_proxy_http.so

2、配置转发规则

 ProxyRequests Off
 proxy_pass /api http://127.0.0.1:8602;
 ProxyPassReverse /api http://127.0.0.1:8602;
 proxy_set_header Host "192.168.60.31:8602";
 proxy_set_header X-Forwarded-For $remote_addr;

将api开头的请求转发到端口8602的端口服务上。

ProxyRequests Off 指令是指开启反向代理,对于客户端来说,他就是原始服务器,并且客户端不用进行特别的设置;而正向代理允许客户端通过它访问任何服务并隐藏客户端自身,因此必须采取一些安全措施确保只为授权的服务器提供服务;

ProxyPass 将一个远端服务器映射到本地服务器的URL空间中;

ProxyPassReverse 调整由反向代理服务器发送的HTTP回应头中的URL;

Proxy_set_header 是向反向代理服务器后端服务器发起请求时添加header信息,当请求的服务器有多个host时,可以通过Host选项区分。

理解正向代理与方向代理:

正向代理:

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

正向代理

正向代理(Forward Proxy),通常都被简称为代理,就是在用户无法正常访问外部资源,比方说受到GFW的影响无法访问twitter的时候,我们可以通过代理的方式,让用户绕过防火墙,从而连接到目标网络或者服务。

Nginx

Nginx也可以通过设置proxy_pass来实现反向代理。配置如下:

location /dir {
    proxy_pass http://127.0.0.1/api;
}

反向代理的优势

  1.  请求的统一控制,包括设置权限、过滤规则等;
  2.  隐藏内部服务真实地址,暴露在外的只是反向代理服务器地址;
  3.  实现负载均衡,内部可以采用多台服务器来组成服务器集群,外部还是可以采用一个地址访问;
  4.  解决Ajax跨域问题;
  5.  作为真实服务器的缓冲,解决瞬间负载量大的问题。

参考1:http://www.uis.cc/2014/11/21/apache-nginx-Reverse-proxy/
参考2:http://www.cnblogs.com/gabrielchen/p/5066120.html
参考3:http://blog.jobbole.com/90975/

JackSun

JackSun

I'm a coder.

You may also like...

1 Response

Leave a Reply

Your email address will not be published.