nginx 解决前端 ajax 跨域问题

本文介绍了如何利用nginx解决前端跨域问题,特别是在前端页面和AJAX请求的源不同时。通过设置nginx的proxy_pass代理,调整URL路径匹配顺序,避免死循环,实现跨域请求。示例配置展示了正确处理不同URL请求的方式,以确保正确代理并防止服务器响应500错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

跨域,是两个不同域名,或不同端口,不同二级域名,不同协议的情况下发生的;

URL说明允许通讯
http://www.a.com/a.js同一域名下允许
http://www.a.com/b.js  
   
http://www.a.com/lab/a.js同一域名下不同文件夹允许
http://www.a.com/script/b.js  
   
http://www.a.com:8000/a.js同一域名,不同端口不允许
http://www.a.com/b.js  
   
http://www.a.com/a.js同一域名,不同协议不允许
https://www.a.com/b.js  
   
http://www.a.com/a.js域名和域名对应ip不允许
http://192.168.153.1/a.js  
   
http://www.a.com/a.js主域相同,子域不同不允许
http://script.a.com/b.js  
   
http://www.a.com/a.js同一域名,不同二级域名(同上)不允许(cookie这种情况下也不允许访问)
http://a.com/b.js  
   
http://www.cnblogs.com/a.js不同域名不允许
http://www.a.com/b.js  
   
   
   
   
   
   

当前前端页面地址:http://localhost/test/

页面 ajax 请求地址:http://wechatads.com/kua/test?vid=132

两个地址 不同域名;正常请求出现如下错误提示:



后端代码跨域允许跨域请求,但是如果请求的是一个html页面用于渲染怎么办?这时就可以用到 nginx 代理 proxy_pass;

原始的 server 配置


添加代理之后的配置信息,注意红框中的代码;proxy_pass后面的 '/' 有和没有区别是很大的,而且先后顺序也有关系,如果将代理配置放在 “location / ”之后,估计执行不到代理了,因为会先响应上面的请求配置。



示例一:

location /kua/
{
  proxy_pass http://wechatads.com; 

}

示例二:

location /kua/
{
  proxy_pass http://wechatads.com/; 

}

针对示例一,如果访问url 是 http://wechatads.com/kua/test.jsp,则被nginx代理后,实际请求到的资源路径还是为http://wechatads.com/kua/test.jsp,跟路径没变。


针对示例二,如果访问url 是 http://wechatads.com/kua/test.jsp,则被nginx代理后,实际请求到的资源路径还是为http://wechatads.com/test.jsp,跟路径变为域名根目录。


跨域代理的时候,切记使用示例二情况;如果用示例一;会在代理处形成死循环;造成服务器响应 500 的情况

针对示例一,如果访问url 是 http://wechatads.com/kua/test.jsp,则被nginx代理后,实际请求到的资源路径还是为http://wechatads.com/kua/test.jsp,跟路径没变。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值