Nginx跨域访问场景配置和防盗链
跨域访问控制
跨域访问
为什么浏览器禁止跨域访问
- 不安全,容易出现CSRF攻击!
如果黑客控制的网站B在响应头里添加了让客户端去访问网站A的恶意信息,就会出现CSRF攻击
Nginx如何配置跨域访问
add_header语法
- Syntax:add_header
name value [always];
- Default:—
- Context:
http, server, location, if in location
语法解释:
- add_header
name value [always];
name
表示响应头返回的key
value
表示响应头返回的key对应的value
add_header跨域配置
1 2 3 4 5 | location ~ .*\.(htm|html)$ { add_header Access-Control-Allow-Origin *; add_header Access-Control-Allow-Methods GET,POST,PUT,DELETE,OPTIONS; root /opt/app/code; } |
防盗链
防盗链目的
- 防止资源被盗用。
- 防止非正常用户访问,占用网站资源,影响网站性能,势必影响正常用户访问
基于http_referer防盗链配置模块
ngx_http_referer_module模块用于阻止对“Referer”头字段中具有无效值的请求访问站点。
举例
1 2 3 4 5 6 7 8 9 10 11 | valid_referers none blocked server_names *.example.com example.* www.example.org/galleries/ ~\.google\.; if ($invalid_referer) { return 403; } |
referer_hash_bucket_size语法
- Syntax: referer_hash_bucket_size size;
- Default: referer_hash_bucket_size 64;
- Context: server, location
语法解释:
referer_hash_bucket_size size;表示设置有效引用散列表的存储区大小。
referer_hash_max_size 语法
- Syntax: referer_hash_max_size size;
- Default: referer_hash_max_size 2048;
- Context: server, location
语法解释:
- referer_hash_max_size size;表示设置有效引用者哈希表的最大大小。
valid_referers语法
- Syntax: valid_referers none | blocked | server_names | string ...;
- Default: —
- Context: server, location
语法解释:
- valid_referers none | blocked | server_names | string ...;
- none表示请求标头中缺少“Referer”字段;
- blocked表示“Referer”字段出现在请求标头中,但其值已被防火墙或代理服务器删除; 这些值是不以“http://”或“https://”开头的字符串;
- server_names 表示“Referer”请求头字段包含一个服务器名称;
- string 表示定义服务器名称和可选的URI前缀。 服务器名称的开头或结尾可以包含“*”。 在检查期间,“Referer”字段中的服务器端口被忽略;
防盗链小案例
touch test_referer.html (在 /op/app/code 目录下)
1 2 3 4 5 6 7 8 9 | <html> <head> <meta charset= "utf-8" > <title>imooc1</title> </head> <body style= "background-color:red;" ><br> <h1>张彪</h1> <img src= "http://192.168.1.112/wei.png" /> </body> </html> |
配置防盗链如果不是从 www.zhangbiao.com 域名转来的就会报错
1 2 3 4 5 6 7 8 9 10 11 | location ~ .*\.(jpg|gif|png)$ { valid_referers none blocked www.zhangbiao.com; if ($invalid_referer) { return 403; } root /opt/app/code/images; } location ~ /test_refer.html { root /opt/app/code; } |
访问
1 | http: //192.168.1.112/test_refer.html |
访问
1 | http: //www.zhangbiao.com/test_refer.html |
允许其他网站访问自己网站资源配置
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理