零基础新手小白快速了解掌握服务集群与自动化运维(七)Nginx模块--Nginx反向代理与缓存功能(二) - 实践

news/2025/9/28 11:28:33/文章来源:https://www.cnblogs.com/slgkaifa/p/19116346

零基础新手小白快速了解掌握服务集群与自动化运维(七)Nginx模块--Nginx反向代理与缓存功能(二) - 实践

四、 Nginx配置跨域 CORS

4.1 跨域的定义

同源策略限制了从同一个源加载的文档或脚本如何与来自另一个源的资源进行交互。这是一个用于隔离潜在恶意文件的重要安全机制。通常不允许不同源间的读操作。

4.2 同源的定义

如果两个页面的协议,端口(如果有指定)和域名都相同,则两个页面具有相同的源。

与 URL http://store.company.com/dir/page.html 的源进行对比的示例:

  • http://store.company.com/dir2/other.html 同源

  • https://store.company.com/secure.html 不同源,协议不同

  • http://store.company.com:81/dir/etc.html 不同源,端口不同

  • http://news.company.com/dir/other.html 不同源,主机不同

4.3 不同源的限制

  • Web 数据层面,同源策略限制了不同源的站点读取当前站点的 Cookie 、 IndexDB 、 LocalStorage 等数据;

  • DOM 层面,同源策略限制了来自不同源的 JavaScript 脚本对当前 DOM 对象读和写的操作;

  • 网络层面,同源策略限制了通过 XMLHttpRequest 等方式将站点的数据发送给不同源的站点。

4.4 Nginx 解决跨域的原理

浏览器的同源策略限制了跨域请求,但当使用 Nginx 作为代理服务器时,浏览器发送的请求实际上是发送到与前端页面同源的 Nginx 服务器。然后 Nginx 将请求转发到真正的目标服务器,目标服务器返回的响应再通过 Nginx 返回给浏览器。从浏览器的角度看,它只与同源的 Nginx 服务器进行交互,从而绕过了 CORS 限制

4.5 案例

前端 server 的域名为:fe.server.com

后端服务的域名为:dev.server.com

现在在 fe.server.com 对 dev.server.com 发起请求一定会出现跨域。

现在我们只需要启动一个 Nginx 服务器,将 server_name 设置为 fe.server.com 然后设置相应的 location 以拦截前端需要跨域的请求,最后将请求代理回 dev.server.com 。

如下面的配置:

server {listen        80;server_name  fe.server.com;location / {proxy_pass dev.server.com;proxy_set_cookie_domain target-domain.com your-domain.com;proxy_set_header Host target-domain.com;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;# 可选的配置,用于处理响应头proxy_set_header Access-Control - Allow - Origin http://fe.server.com;proxy_set_header Access-Control - Allow - Methods GET,POST,PUT,DELETE;proxy_set_header Access-Control - Allow - Headers Content - Type,Authorization;}
}

配置解析:

  • proxy_set_header

    • Host backend - domain.com:设置转发请求的Host头信息。这是因为后端服务器可能会根据Host头来区分不同的虚拟主机或服务,所以需要将正确的Host信息传递给后端服务器,使其能够正确处理请求。

    • X-Real-IP $remote_addr和X-Forwarded-For $proxy_add_x_forwarded_for:这两个指令用于传递客户端的真实 IP 地址。$remote_addr是 Nginx 记录的客户端 IP 地址,$proxy_add_x_forwarded_for是一个包含了客户端 IP 以及中间代理服务器 IP(如果有的话)的变量。这样后端服务器可以获取到正确的客户端 IP 信息,用于日志记录、访问控制等目的。

    • Origin http://frontend - domain.com:这是关键的一个设置,用于在转发请求时,将Origin头信息设置为前端页面的域名。后端服务器在收到这个请求时,会认为请求来自于同源的http://frontend - domain.com,从而避免了 CORS 限制。这样后端服务器就可以正常处理请求并返回响应,响应会通过 Nginx 再返回给浏览器。

    • proxy_set_header Access-Control - Allow - Origin

      这个指令用于在 Nginx 作为代理服务器返回响应时,设置Access - Control - Allow - Origin响应头。通过将其设置为前端页面的域名(http://frontend - domain.com),浏览器会认为这个响应是来自同源的服务器,从而允许前端 JavaScript 代码访问这个响应,有效地绕过了 CORS 限制。

    • proxy_set_header Access-Control - Allow - Methods

      用于设置Access - Control - Allow - Methods响应头,指定允许的 HTTP 请求方法。在这里列举了GET、POST、PUT和DELETE,表示后端服务器允许前端通过这些方法进行跨域请求。可以根据实际的后端 API 支持的方法进行调整。

    • proxy_set_header Access-Control - Allow - Headers

      设置Access - Control - Allow - Headers响应头,指定允许的请求头。Content - Type头通常用于指定请求或响应的内容类型,如application/json或text/plain等;Authorization头用于传递认证信息,如令牌或用户名 / 密码等。这确保了前端在跨域请求中可以发送这些必要的请求头,并且后端会认可这些请求头。

这样可以完美绕过浏览器的同源策略:fe.server.com 访问 Nginx 的 fe.server.com 属于同源访问,而 Nginx 对服务端转发的请求不会触发浏览器的同源策略。

五、Nginx防盗链设置

5.1 什么是盗链

  • 在实际生产过程中,我们线上的图片等静态资源,经常会被其他网站盗用,他们发大财的同时,成本确实我们在买单,下面来说下,如何杜绝这种行为。

  • 应该说只要是静态资源都是可以防盗链的,只需要在Server字段加上几行代码即可。众所周知网站出名了后,会有各种***民来找茬的,最常见的就是爬你网站的东西。

  • 关于防盗链这里不得不提一下网页的加载顺序是先加载HTML相关的内容,然后解析HTML的内容,那些需要加载图片,那些需要加载文件,是逐步加载的,所以可以在加载静态资源的时候做防盗链的操作,例如:在加载图片的时候直接跳转去其他链接,或者直接返回404,403等错误代码,拒绝它的请求。

如何区分哪些是不正常的用户?

  • HTTP Referer是Header的一部分,当浏览器向Web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器借此可以获得一些信息用于处理,例如防止未经允许的网站盗链图片、文件等。因此HTTP Referer头信息是可以通过程序来伪装生成的,所以通过Referer信息防盗链并非100%可靠,但是,它能够限制大部分的盗链情况.

  • 比如在www.google.com 里有一个 www.baidu.com 链接,那么点击这个www.baidu.com ,它的header 信息里就有:Referer=http://www.google.com

5.2 Referer解析

  • HTTP 协议中有一个用来表示“页面或资源”来源的“请求头”,这个请求头叫做 Referer --> Referer是表示请求是从哪个网址发出的防盗链功能基于HTTP协议支持的 Referer 机制,通过Referer跟踪来源,对来源进行识别和判断

5.3 配置防盗链案例

为了模拟盗链,让192.168.166.9为网站服务站点,192.168.166.10访问192.168.166.9进行盗链。

修改Nginx的字符集以支持中文:

charset utf-8;

修改 192.168.166.10 Nginx 默认访问文件:

产生盗链站点

此时在浏览器输入192.168.166.10,可以正常访问192.168.166.9站点的图片资源。

如果不想被盗链,则对192.168.166.9站点服务修改Nginx配置文件,防盗链的配置可以在任意的 location 模块下设置,不能在 server 下,不想让别人盗链哪个资源就在那个资源的 location 模块下设置防盗链。

防盗链设置格式:

valid_referers none | blocked | server_names | strings ....;

  • --none:允许没有http_refer的请求访问资源,检测 Referer 头域不存在的情况,则可以访问。

  • --blocked:检测 Referer 头域的值被防火墙或者代理服务器删除或伪装的情况。这种情况该头域的值不以 “http://” 或 “https://” 开头。允许不是http://开头的,不带协议的请求访问资源。

  • --server_names :只允许指定ip/域名来的请求访问资源(白名单)。可设置一个或多个 URL ,检测 Referer 头域的值是否是这些 URL 中的某一个。在生产环境中尽量使用域名,不使用ip。

举例

valid_referers 192.168.44.101;
if ($invalid_referer) {
return 403;
}

192.168.166.9设置防盗链

server {listen 80;server_name localhost;location / {root   /usr/local/nginx1273/html;index  index.html index.htm;}location ~* \.(js|img|css|png)${valid_referers 192.168.166.9; #只允许192.168.166.9访问静态资源,其他人访问则会返回403if ($invalid_referer){return 403;}root html;index index.html index.htm;}error_page 500 502 503 504 /50x.html;location =/50x.html {root html;}
}

5.4 测试

浏览器测试

用192.168.166.10去访问,css等静态资源返回403,获取不到数据。

点击”站点“,跳转到192.168.166.9站点资源是显示:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/920579.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入解析:Vue3中文本与图片一起垂直居中

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

建设网站个人网上银行今天国际新闻最新消息10条

Response 对象,派生自HttpResponse 类,该类封装来自 ASP.NET 操作的 HTTP 响应信息。存在于System.Web命名空间下。 注:MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型就是设定某种扩展名的文件用一种应用程序来打开的…

电桥采集模块 24位ADC+128倍可调增益 高精度测量支持多接口输出

电桥采集模块 24位ADC+128倍可调增益 高精度测量支持多接口输出BRGxxx系列模块是一款专为惠斯通电桥测量设计的高分辨率数据采集模块,采用24位ADC同步测量激励源与电桥输出信号,并提供1~128倍可调增益放大,确保高精…

ubuntu 系统启动服务及服务依赖

ubuntu 系统启动服务及服务依赖[Unit] Description=QNet Script After=NetworkManager.serviceo[Service] ExecStart=/usr/bin/bash -c source /home/qpanda/myenv/bin/activate && python3 /home/qpanda/qnet…

Jira停售Data Center尘埃落定!中国企业迁移需落实的6大关键项目管理工具清单

随着Jira Data Center版本停售,中国企业亟需寻找替代方案以确保项目管理连续性。本文将为您精准筛选6类必备工具,覆盖从需求管理到合规审计的全流程:需求管理与优先级规划工具、敏捷开发与任务协作平台、DevOps全链…

实用指南:学习React-17-useMemo

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

集团网站制作公司用python做网站优点

来源:经济日报-中国经济网记者/梁 睿米磊建议创投和保荐机构从五个方面入手筛选“硬科技”企业:“围绕落实国家战略规划确定的科技发展方向或承担具体攻关任务的企业;拥有关键核心技术和先进技术的企业;科技创新和转化应用能力突出…

Gitee崛起:中国开发者迎来本土化研发平台新纪元

Gitee崛起:中国开发者迎来本土化研发平台新纪元 腾讯CODING DevOps服务的战略调整正在引发国内开发者生态的深刻变革。随着这一主流研发平台的逐步退出,中国软件产业正面临关键技术栈迁移的关键拐点。在这场转型浪潮…

湖北做网站教程哪家好上海知名的网站建设

在爱情中,不是每个男生都是幸运的,也不是每次的表白都是如你所愿的。有成功总有失败,成功是喜悦的,但是失败却是痛苦的。不过有的时候男生和女生表白以后,女生对男生说了这样的一段,其实我希望以后我们还是…

赣州做网站多少钱暴雪公司

解决神经网络过拟合问题—Dropout方法一、what is Dropout?如何实现?二、使用和不使用Dropout的训练结果对比一、what is Dropout?如何实现? 如果网络模型复杂,L2范数权值衰减方法就难以对付过拟合。这种情况下&#…

中国建设银行网站官网下载建设集团英文缩写

支付宝当面付官方接口文档:https://docs.open.alipay.com/194/105170/ 在弄清楚如何计算优惠之前先了解下相关金额参数: 1、请求中金额参数total_amount:订单总金额,订单总金额,单位为元,精确到小数点后两位…

关键领域软件研发知识管理的范式革命:从静态文档到智能图谱的跃迁

关键领域软件研发知识管理的范式革命:从静态文档到智能图谱的跃迁 在航空航天、金融科技和工业控制等关键领域,一场关于软件研发知识管理的静默革命正在上演。传统文档管理方式已无法满足现代软件工程对协作效率和知…

【IEEE出版、曾获中国科协认证】第六届机械工程、智能制造与自动化技术国际学术会议 (MEMAT 2025)

广东工业大学&东莞理工学院联合主办 第六届机械工程、智能制造与自动化技术国际学术会议 (MEMAT 2025) 2025 6th International Conference on Mechanical Engineering, Intelligent Manufacturing, and Automatio…

陕西建设厅八大员官方网站wordpress生成pdf

今日学习一下红外遥控的解码使用,红外遥控在日常生活必不可少,它的解码与使用也是学习单片机的一个小过程,我们将通过实践来实现它。 文章提供源码、测试工程下载、测试效果图。 目录 红外遥控原理: 红外遥控特点: …

时间同步NTP服务

在企业的实际应用过程中,为了解决因各个主机的时间不一致导致的问题(数据的传送和处理发生混乱),那么就需要搭建NTP时间服务器来同步各个主机的时间。 这里同步的主要是软件时间,也即在linux当中可以通过date指令…

【WCH蓝牙系列芯片】-基于CH585开发板—IO口(GPIO)外部中断唤醒蓝牙睡眠模式

【WCH蓝牙系列芯片】-基于CH585开发板—IO口(GPIO)外部中断唤醒蓝牙睡眠模式--------------------------------------------------------------------------------------------------------------------------------…

DevExpress WinForms v25.2新功能预览 - 即将升级富文本编辑器控件功能

DevExpress WinForms v25.2新功能预览 - 即将升级富文本编辑器控件功能DevExpress WinForms 拥有180+组件和UI库,能为Windows Forms平台创建具有影响力的业务解决方案。DevExpress WinForms能完美构建流畅、美观且易于…

网站建设的四个步骤网站建设岗位能力

​​​​下载 地址:https://nodejs.org/zh-cn/download/prebuilt-installer 安装包 开始安装 安装完成 给文件夹添加权限 创建两个文件夹 node_cache node_global 更新环境变量 修改环境变量,新的全局模块路径,这样在任何位置运行命令时都…

便宜做外贸网站天津网站建设流程

参考: https://www.cnblogs.com/kingsm/p/9849339.html 转载于:https://www.cnblogs.com/cwxwdm/p/10605529.html

linux怎么做网站有没有可以代理推广的平台

作者:老马引流定位:专业专注引流推广0X00 前言毫不客气的说,视频正日益成为社交媒体和营销的重要组成部分,有越来越多的人参与到视频剪辑当中来,而其中最为关键的就是视频剪辑软件。而市面上的视频剪辑软件当然也是五花…