打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
nginx的反向代理机制解决前端跨域问题

nginx的反向代理机制解决前端跨域问题

1.什么是跨域以及产生原因

跨域是指a页面想获取b页面资源,如果a、b页面的协议、域名、端口、子域名不同,或是a页面为ip地址,b页面为域名地址,所进行的访问行动都是跨域的,而浏览器为了安全问题一般都限制了跨域访问,也就是不允许跨域请求资源。

2.跨域的常见解决方法

目前来讲没有不依靠服务器端来跨域请求资源的技术

1.jsonp 需要目标服务器配合一个callback函数。

2.window.name+iframe 需要目标服务器响应window.name。

3.window.location.hash+iframe同样需要目标服务器作处理。

4.html5的postMessage+ifrme 这个也是需要目标服务器或者说是目标页面写一个postMessage,主要侧重于前端通讯。

5.CORS 需要服务器设置header :Access-Control-Allow-Origin。

6.nginx反向代理 这个方法一般很少有人提及,但是他可以不用目标服务器配合,不过需要你搭建一个中转nginx服务器,用于转发请求。

当然,Apache 也可以做反向代理,原理差不多,见上一篇文章,此处不多说。

nginx反向代理具体配置

redis.conf文件如下:

## Basic reverse proxyserver ##

## Apache backend forwww.redis.com.cn ##

upstream apachephp {

server ip:8080; #Apache

}

## Startwww.redis.com.cn ##

server {

listen 80;

server_namewww.redis.com.cn;

access_log logs/redis.access.log main;

error_loglogs/redis.error.log;

root html;

index index.htmlindex.htm index.php;

## send request back toapache ##

location / {

proxy_passhttp://apachephp;

#Proxy Settings

proxy_redirect off;

proxy_set_header Host$host;

proxy_set_headerX-Real-IP $remote_addr;

proxy_set_headerX-Forwarded-For $proxy_add_x_forwarded_for;

proxy_next_upstreamerror timeout invalid_header http_500 http_502 http_503 http_504;

proxy_max_temp_file_size0;

proxy_connect_timeout90;

proxy_send_timeout 90;

proxy_read_timeout 90;

proxy_buffer_size 4k;

proxy_buffers 4 32k;

proxy_busy_buffers_size64k;

proxy_temp_file_write_size64k;

}

}

## End www.redis.com.cn##

以下做一个解释:

1.'^~ /proxy/html/ '

就像上面说的一样是一个匹配规则,用于拦截请求,匹配任何以 /proxy/html/开头的地址,匹配符合以后,停止往下搜索正则。

2.rewrite^/proxy/html/(.*)$ /$1 break;

代表重写拦截进来的请求,并且只能对域名后边的除去传递的参数外的字符串起作用,例如www.c.com/proxy/html/api/msg?method=1&para=2重写。只对/proxy/html/api/msg重写。

rewrite后面的参数是一个简单的正则 ^/proxy/html/(.*)$ ,$1代表正则中的第一个(),$2代表第二个()的值,以此类推。

break代表匹配一个之后停止匹配。

3.proxy_pass

既是把请求代理到其他主机,其中http://www.b.com/ 写法和 http://www.b.com写法的区别如下:

不带/

location /html/

{

proxy_passhttp://b.com:8300;

}

带/

location /html/

{

proxy_passhttp://b.com:8300/;

}

上面两种配置,区别只在于proxy_pass转发的路径后是否带 “/”。

针对情况1,如果访问url = http://server/html/test.jsp,则被nginx代理后,请求路径会便问http://proxy_pass/html/test.jsp,将test/ 作为根路径,请求test/路径下的资源。

针对情况2,如果访问url = http://server/html/test.jsp,则被nginx代理后,请求路径会变为 http://proxy_pass/test.jsp,直接访问server的根资源。

修改配置后重启nginx代理就成功了。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
tomcat结合nginx使用小结
python爬虫18 | 就算你被封了也能继续爬,使用IP代理池伪装你的IP地址,让IP飘一会
nginx tomcat负载均衡之文件上传访问策略
Nginx反向代理后端多个Tomcat、Nginx+PHP服务器(Nginx的代理和负载功能)
『互联网架构』软件架构
Nginx服务器的反向代理proxy
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服