当前位置: 首页 > news >正文

【Linux】Nginx解决跨域问题

文章目录

  • 一、跨域问题
  • 二、解决跨域问题
  • 三、结尾


一、跨域问题

在前后端分离的项目中,前端通常运行在一个域名或端口上,而后端运行在另一个域名或端口上。当浏览器发起跨域请求时,即前端页面向后端发送请求的域名、端口或协议与当前页面的域名、端口或协议不一致时,就会发生跨域问题。

跨域问题是由浏览器的同源策略引起的安全机制。同源策略要求网页只能访问与其来源相同的资源,即协议、域名和端口必须一致,而跨域请求则突破了这个限制。

当以下任一条件不满足时,就会发生跨域问题:

不同的协议:例如,一个页面通过 HTTP 协议加载了 JavaScript,然后尝试向使用 HTTPS 协议的服务器发送请求。
不同的域名:例如,一个页面从 www.example.com 加载了 JavaScript,然后尝试向 api.example.com 发送请求。
不同的端口:例如,一个页面从 www.example.com:8080 加载了 JavaScript,然后尝试向 www.example.com:3000 发送请求。

二、解决跨域问题

为了解决跨域问题,可以借助Nginx来进行反向代理。以下是使用Nginx解决跨域问题的步骤:

  1. 在前端服务器上安装和配置Nginx,安装教程可以看我上一篇文章:《【Linux】Linux中安装Nginx》。
  2. 在Nginx配置文件中使用反向代理实现跨域。

示例
前端调试页面的地址是:http://www.example.com:8080/dist/index.html
后端请求的接口地址是:http://api.example.com:8181/api/

Nginx默认配置文件地址 /usr/local/nginx/conf,如果安装的时候指定了路径,就在你指定的目录下,修改配置文件nginx.conf

server{listen 80;server_name www.example.com; # 前端域名或ip# 默认配置,无需修改location / {root   html;index  index.html index.htm;}# 后端接口配置location /api {proxy_pass http://api.example.com:8181;}# 前端页面配置location /dist {proxy_pass http://www.example.com:8080/dist;}}

PS:前端访问后端API的域名或ip需要设置为server_name的值,端口号为监听的端口号,然后根据/api匹配的路径转发到后端接口配置的地址上,举例:后端实际查询用户列表的接口地址为http://api.example.com:8181/api/user/list,那么前端页面访问接口时路径应该为http://www.example.com/api/user/list(我这里端口是80,所以可以省略)。

如果前端不修改,会出现报错Access to XMLHttpRequest at 'http://api.example.com:8181/api/user/list' from origin 'http://www.example.com' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.,就算配置了add_header 'Access-Control-Allow-Origin' '*' always也无效。

  1. 重新加载Nginx配置:在终端中执行命令以重新加载Nginx配置文件:
$ ./nginx -s reload

在重新加载Nginx配置文件之前,可以先使用 ./nginx -t 验证nginx配置文件是否正确。

4.页面访问:http://www.example.com/dist/index.html

三、结尾

以上就是全部了,为了解决这个问题我头都大了,不管怎么改配置都无效,最后还是前端改了下马上就可以了,所以记录一下。

http://www.lryc.cn/news/136011.html

相关文章:

  • 无涯教程-PHP - preg_split()函数
  • B. Spreadsheets
  • matlab面向对象
  • 01、Cannot resolve MVC View ‘xxxxx前端页面‘
  • 时空智友企业流程化管控系统文件上传漏洞复现
  • 【已解决】Authenticator:无法添加账户请验证激活代码是否正确以及您的设备是否已为此应用启用推送通知
  • 聊聊springboot tomcat的maxHttpFormPostSize
  • java并发:synchronized锁详解
  • Unity 之NavMeshAgent 组件(导航和路径寻找的组件)
  • 装箱和拆箱
  • 等保测评--安全通信网络--测评方法
  • 统计学补充概念11-tsne
  • Linux_11_系统启动和内核管理
  • 【从零学习python 】65. Python正则表达式修饰符及其应用详解
  • QA2
  • centos7卸载docker
  • 【计算机视觉】递归神经网络在图像超分的应用Deep Recursive Residual Network for Image Super Resolution
  • Centos 7 安装系列(8):openGauss 3.0.0
  • NOIP真题讲解 传球游戏 接水问题
  • 《论文阅读18》 SSD: Single Shot MultiBox Detector
  • NOIP2016普及组第四题 魔法阵
  • uniapp-滑块验证组件wo-slider
  • NPM 管理组织成员
  • 设计模式(3)抽象工厂模式
  • 【C++】早绑定、析构与多态 | 一道关于多态的选择题记录
  • mac下安装tomcat
  • 【小梦C嘎嘎——启航篇】string常用接口的模拟实现
  • 【Jenkins】持续集成部署学习
  • Redis数据结构之List
  • SpringCloud Alibaba实战和源码(7)Skywalking