深入浅出 -- 系统架构之负载均衡Nginx跨域配置

一、Nginx跨域配置

   跨域问题在之前的单体架构开发中,其实是比较少见的问题,除非是需要接入第三方SDK时,才需要处理此问题。但随着现在前后端分离、分布式架构的流行,跨域问题也成为了每个Java开发必须要懂得解决的一个问题。

跨域问题产生的原因

   产生跨域问题的主要原因就在于同源策略,为了保证用户信息安全,防止恶意网站窃取数据,同源策略是必须的,否则cookie可以共享。由于http无状态协议通常会借助cookie来实现有状态的信息记录,例如用户的身份/密码等,因此一旦cookie被共享,那么会导致用户的身份信息被盗取。
同源策略主要是指三点相同,协议+域名+端口 相同的两个请求,则可以被看做是同源的,但如果其中任意一点存在不同,则代表是两个不同源的请求,同源策略会限制了不同源之间的资源交互。

Nginx解决跨域问题

   弄明白了跨域问题的产生原因,接下来看看Nginx中又该如何解决跨域呢?其实比较简单,在nginx.conf中稍微添加一点配置即可:


  
location / {
    # 允许跨域的请求,可以自定义变量$http_origin,*表示所有
    add_header 'Access-Control-Allow-Origin' *;
    # 允许携带cookie请求
    add_header 'Access-Control-Allow-Credentials' 'true';
    # 允许跨域请求的方法:GET,POST,OPTIONS,PUT
    add_header 'Access-Control-Allow-Methods' 'GET,POST,OPTIONS,PUT';
    # 允许请求时携带的头部信息,*表示所有
    add_header 'Access-Control-Allow-Headers' *;
    # 允许发送按段获取资源的请求
    add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
    # 一定要有!!!否则Post请求无法进行跨域!
    # 在发送Post跨域请求前,会以Options方式发送预检请求,服务器接受时才会正式请求
    if ($request_method = 'OPTIONS') {
        add_header 'Access-Control-Max-Age' 1728000;
        add_header 'Content-Type' 'text/plain; charset=utf-8';
        add_header 'Content-Length' 0;
        # 对于Options方式的请求返回204,表示接受跨域请求
        return 204;
    }
}

nginx.conf文件加上如上配置后,跨域请求即可生效了。

但如果后端是采用分布式架构开发的,有时候RPC调用也需要解决跨域问题,不然也同样会出现无法跨域请求的异常,因此可以在你的后端项目中,通过继承HandlerInterceptorAdapter类、实现WebMvcConfigurer接口、添加@CrossOrgin注解的方式实现接口之间的跨域配置。

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-04-08 10:44:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-08 10:44:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-08 10:44:02       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-08 10:44:02       20 阅读

热门阅读

  1. 前后端接口写法(传输数据)

    2024-04-08 10:44:02       12 阅读
  2. Teamcenter 修改缓存文件夹名称及路径的方法

    2024-04-08 10:44:02       23 阅读
  3. css 手写返回箭头

    2024-04-08 10:44:02       11 阅读
  4. 【告警监控】监控,巡检和拨测

    2024-04-08 10:44:02       13 阅读
  5. Unity LayoutRebuilder 强制UI重新布局

    2024-04-08 10:44:02       12 阅读
  6. wpf viewmodel和界面双向通知

    2024-04-08 10:44:02       10 阅读
  7. tx-lcn使用

    2024-04-08 10:44:02       13 阅读
  8. WPF —— FromTo/By动画

    2024-04-08 10:44:02       12 阅读
  9. C#WPF控件Menu详解

    2024-04-08 10:44:02       12 阅读
  10. Springboot启动过程

    2024-04-08 10:44:02       15 阅读
  11. Docker设置时区

    2024-04-08 10:44:02       18 阅读
  12. opencv x86(32位) windows下vs2019编译问题

    2024-04-08 10:44:02       14 阅读