Nginx配置跨域访问

0    236    3

Tags:

👉 本文共约2104个字,系统预计阅读时间或需8分钟。

什么是跨域访问

在A网站中,我们希望使用Ajax来获得B网站中的特定内容。如果A网站与B网站不在同一个域中,那么就出现了跨域访问问题。你可以理解为两个域名之间不能跨过域名来发送请求或者请求数据,否则就是不安全的。跨域访问违反了同源策略,同源策略规定,浏览器的ajax只能访问跟它的HTML页面同源(相同域名或IP的资源)。

Nginx配置跨域访问

如何确定是跨域请求

  • A域名资源请求到B/C……域名
  • 你当前访问的域名是http的,但请求的部分资源是https
  • 当使用ajax访问远程服务器时,请求失败,浏览器报如上错误。这是出于安全的考虑,默认禁止跨域访问导致的。

如果是跨域访问,这时候就会报错

has been blocked by CORS policy: No 'Access-Control-Allow-Origin'

错误场景如:我的WordPress报错:Fonts –No 'Access-Control-Allow-Origin',已经提示我字体文件请求http url跨域了,然后根据我用的服务环境设置如下就行,参考:https://www.uedbox.com/post/50992/

Nginx跨域设置No Access-Control-Allow-Origin无效的解决办法

报错:Access to font at 'https://pic.xmmup.com/i/resource/iconfont.ttf?t=1501323857226' from origin 'https://www.xmmup.com' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

不能加载字体或图片

解决方案:在Nginx中配置:

参数说明
Control-Allow-Origin表示允许访问的外域请求。
Access-Control-Allow-Headers首部字段用于预检请求的响应。其指明了实际请求中允许携带的首部字段。
Access-Control-Allow-Methods首部字段用于预检请求的响应。其指明了实际请求所允许使用的 HTTP 方法。

Nginx允许指定单个域名跨域访问

第一条指令:接受www.sundayle.com 跨域请求
第二条指令:当该标志为真时,响应于该请求是否可以被暴露(可选)
第三条指令:指定请求的方法,可以是GET, POST, OPTIONS, PUT, DELETE等(可选)
第四条指令:允许脚本访问的返回头(可选)
第五条指令:给OPTIONS 添加 204的返回,是为了处理在发送POST请求时Nginx依然拒绝访问的错误,发送”预检请求”时,需要用到方法 OPTIONS ,所以服务器需要允许该方法。

Nginx允许多个域名跨域访问

方法一:使用IF(不建议)

虚拟主机比较多,不方便

本人提供Oracle(OCP、OCM)、MySQL(OCP)、PostgreSQL(PGCA、PGCE、PGCM)等数据库的培训和考证业务,私聊QQ646634621或微信db_bao,谢谢!

方法二:使用MAP(建议)

跨域测试

其他

Nginx 更多判断

Apache中启用CORS
在httpd配置或.htaccess文件中添加如下语句

PHP中启用CORS
通过在服务端设置Access-Control-Allow-Origin响应头

允许所有来源访问

允许来自特定源的访问

配置多个访问源
由于浏览器实现只支持了单个origin、*、null,如果要配置多个访问源,可以在代码中处理如下

HTML中启用CORS

错误:The request client is not a secure context and the resource is in more-private address space private.

报错:

2.168.88.250/wp-content/uploads/2022/07/logo-1.jpg' from origin 'http://116.62.205.34:81' has been blocked by CORS policy: The request client is not a secure context and the resource is in more-private address space private.

解决:

将Block insecure private network requests.项的Default改为Disabled即可。

总结

1、在Access-Control-Allow-Origin后添加多个域名,然后用空格隔开,这种方法是不生效的。

参考

https://sundayle.com/nginx-allows-multiple-domain-cors/
正则表达式在线测试
Nginx 通过 CORS 实现跨域
阮一峰 跨域资源共享 CORS 详解

标签:

头像

小麦苗

学习或考证,均可联系麦老师,请加微信db_bao或QQ646634621

您可能还喜欢...

发表回复

嘿,我是小麦,需要帮助随时找我哦
  • 18509239930
  • 个人微信

  • 麦老师QQ聊天
  • 个人邮箱
  • 点击加入QQ群
  • 个人微店

  • 回到顶部
返回顶部