解决Origin请求头导致的Nginx反向代理403跨域问题

这篇具有很好参考价值的文章主要介绍了解决Origin请求头导致的Nginx反向代理403跨域问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 背景

页面通过域名A【https://a.winfun.com】访问接口,域名A通过Nginx服务进行反向代理,代理到域名B【http://b.winfun.com】,然后进行业务逻辑执行。
时序图:

nginx反向代理403,Nginx,nginx,反向代理,403 跨域

nginx配置:

server {
  listen   31001;
  server_name    localhost;
  proxy_intercept_errors on;
  error_page 404 /404.html;
  error_page 500 502 503 504 /500.html;
  index index.html ;
  charset utf-8;
  
  location /proxy/ {
  	rewrite ^/proxy/(.*) /$1 break; 
  	proxy_pass  http://b.winfun.com;         
  }
    
  location / {
  	root   /usr/local/nginx/html/;
    try_files $uri  /index.html;
  }
}

2. 403跨域

接口返回Http状态为403,出现跨域问题。

image.png

3. Postman模拟

3.1. 模拟

为了方便测试,我们直接将接口放到Postman中进行模拟测试,并带上相关请求头,接口还是返回403,这个没疑问
image.png

3.2. 请求头

在请求头搬迁时,发现了几个可疑的请求头,包含:origin、sec-fetch-mode、sec-fetch-site
其中sec-fetch-mode显示cors,表示是跨域请求;而sec-fetch-stie显示的是same-origin。
orign显示的是和接口调用同样的域名。

image.png

3.3. 猜测

1、sec-fetch- 请求头*
首先将 sec-fetch-mode 也改成 same-origin,接口还是返回403❌,看来sec-fetch-*只是起一定的描述作用。

image.png
2、origin 请求头
跨域问题的出现都是因为请求不符合同源策略,虽然接口调用中,origin请求头和接口请求的域名都是一样的,但其实到了nginx服务,是会反向代理到另外一个域名的;我们此时将origin请求头的域名改为反向代理后的域名,接口返回成功✅

image.png

4、nginx配置调整

origin请求头是浏览器根据请求附上请求信息里面的,所以我们可以通过nginx的proxy_set_header来修改origin请求头。

server {
  listen   31001;
  server_name    localhost;
  proxy_intercept_errors on;
  error_page 404 /404.html;
  error_page 500 502 503 504 /500.html;
  index index.html ;
  charset utf-8;
  
  location /proxy/ {
  	rewrite ^/proxy/(.*) /$1 break; 
		proxy_set_header origin 'http://b.winfun.com';
  	proxy_pass  http://b.winfun.com;         
  }
    
  location / {
  	root   /usr/local/nginx/html/;
    try_files $uri  /index.html;
  }
}

页面接口响应成功!
image.png文章来源地址https://www.toymoban.com/news/detail-658480.html

到了这里,关于解决Origin请求头导致的Nginx反向代理403跨域问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 浏览器同源策略导致跨域问题 No ‘Access-Control-Allow-Origin‘ header 原因及解决方式--(后端、nginx、前端)

    目录 现象 原因 浏览器同源策略 导致结果: 解决方案 跨源资源共享(CORS) 各个端解决方法: 后端: 方式1:重载WebMvcConfigurer方法 方式2:配置监听CorsFilter 方式3:相关类上加注解 @CrossOrigin 注意事项: Nginx解决: 情况1: 前端解决: 本人身份:后端 今天部署线上环境前端

    2024年01月23日
    浏览(56)
  • 微服务Gateway网关(自动定位/自定义过滤器/解决跨域)+nginx反向代理gateway集群

    目录 Gateway网关 1.0.为什么需要网关? 1.1.如何使用gateway网关 1.2.网关从注册中心拉取服务 1.3.gateway自动定位 1.4.gateway常见的断言 1.5.gateway内置的过滤器 1.6.自定义过滤器-全局过滤器 1.7.解决跨域问题 2.nginx反向代理gateway集群 2.1.配置文件 继  nacos注册中心+Ribbon负载均衡+完成

    2024年02月06日
    浏览(68)
  • Nginx配置origin限制跨域请求

    Nginx配置origin限制跨域请求 http {     ...     # 说明:一般使用http_origin来进行跨域控制,当不传递origin头的时候,就为这个里面的默认值,当传递有值得时候,才会走下面得正则匹配          map_hash_bucket_size 128;     map $http_origin $allow_cors {         default 1; \\\"~^htt

    2024年02月07日
    浏览(45)
  • Nginx反向代理 跨域问题

    H5项目部署在自己服务器上,后端数据调用第三方。第三方不愿意解决跨域问题 1.H5项目部署在 a.com 2.H5项目的所有接口请求由第三方的 c.com 改为 b.com 。 3.反向代理用 b.com ,由 b.com 把所有请求转发请求第三方的 c.com 。加上跨域请求头 1. vue 本地开发有代理的问题,如果路径不

    2024年02月16日
    浏览(63)
  • Nginx配置跨域请求Access-Control-Allow-Origin * 详解

    前言 当出现403跨域错误的时候  No \\\'Access-Control-Allow-Origin\\\' header is present on the requested resource ,需要给Nginx服务器配置响应的header参数: 一、 解决方案 只需要在Nginx的配置文件中配置以下参数: 上面配置代码即可解决问题了,不想深入研究的,看到这里就可以啦=-= 二、 解释

    2024年02月22日
    浏览(44)
  • Nginx反向代理请求头丢失

    请求头丢失问题 在配置nginx使用https对服务器上的应用程序进行代理时,查看应用程序的访问日志发现请求头中的token信息丢失了。 解决方案 在对应的https配置模块中添加以下内容 同时在http模块中添加配置 完整配置如下

    2024年02月16日
    浏览(38)
  • nginx反向代理https域名时,请求报错502问题排查

    微信公众号:运维开发故事,作者:冬子先生 一. 现象 在使用nginx反向代理后端服务器的时候,因为配置的是域名,导致HTTPS 请求转发失败,报 SSL 错误,js 报 502 img img 二. 排查过程 1、查看nginx日志,发现报502,但是本地curl upstream中的后端域名是可以正常通的 img 2、查看后端

    2024年02月11日
    浏览(42)
  • 谷歌浏览器请求 strict-origin-when-cross-origin 跨域问题,解决方法之一

    项目打包部署在内网后,index.html 里通过script标签引入的其他链接资源不能正常请求,报的是跨域错误 首先观察了资源请求正常和请求报错的两台电脑,发现两者请求的 Referrer Policy(引荐来源网址政策) 不同。 其次发现两个电脑的谷歌浏览器版本不同,可以正常请求的是用

    2024年02月12日
    浏览(96)
  • 通过nginx将https协议反向代理到http协议请求上

    目前一个系统仅支持https协议访问,因后端服务基于ssl协议,前端在请求是也需要支持ssl协议的https请求来访问。目前的代理服务器是nginx,现在想要 通过http访问系统 ,需通过nginx的 反向代理 或者 重定向方式 将https请求代理为http请求。可实现的做法有如下几种: 1、使后端

    2024年02月08日
    浏览(45)
  • Access-Control-Allow-Origin跨域问题,使用Nginx配置来解决

    前提环境:在A服务器,调用B服务器的资源,报错出现找不到请求头Access-Control-Allow-Origin,输入跨域问题, 需要使用配置nginx来处理 例如:A服务器是liunx系统部署了一个java程序,B服务器是本地服务器,A服务器需要请求访问B服务器的资源,可以用nginx代理来请求到B服务器的资

    2024年02月06日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包