页面接口防刷 解决思路一nginx

本文介绍如何通过Nginx配置缓存以减轻服务器负担,防止因大量请求导致的服务崩溃。详细解释了expires指令的使用方法及不同参数的效果,并提供了实际应用场景的例子。

线上环境 很多接口 如果不做缓存 可能导致有人拿到url  每秒几万次的访问后台程序,导致系统down机.

此处, nginx可以加一层缓存.   

expires起到控制页面缓存的作用,合理的配置expires可以减少很多服务器的请求
要配置expires,可以在http段中或者server段中或者location段中加入
PS. 可以限制单个接口的访问

 location ~ ^/user/ {

proxy_pass http://user.example.com;
expires 1; //1h //1d //expires max; 部分文件看需要可以永久 }
nginx wiki  http://nginx.org/en/docs/http/ngx_http_core_module.html#location

 

语法: expires [time|epoch|max|off]

默认值: expires off

作用域: http, server, location

使用本指令可以控制HTTP应答中的“Expires”和“Cache-Control”的头标,(起到控制页面缓存的作用)。

可以在time值中使用正数或负数。“Expires”头标的值将通过当前系统时间加上您设定的 time 值来获得。

epoch 指定“Expires”的值为 1 January, 1970, 00:00:01 GMT。

max 指定“Expires”的值为 31 December 2037 23:59:59 GMT,“Cache-Control”的值为10年。

-1 指定“Expires”的值为 服务器当前时间 -1s,即永远过期

“Cache-Control”头标的值由您指定的时间来决定:

  • 负数:Cache-Control: no-cache
  • 正数或零:Cache-Control: max-age = #, # 为您指定时间的秒数。

"off" 表示不修改“Expires”和“Cache-Control”的值

demo:

控制图片等过期时间为30天,当然这个时间可以设置的更长。具体视情况而定

比如

location~ \.(gif|jpg|jpeg|png|bmp|ico)$ {

           expires 30d;

       }

控制匹配/resource/或者/mediatorModule/里所有的文件缓存设置到最长时间

比如

      

       location ~ /(resource|mediatorModule)/ {

                root    /opt/demo;

                expires max;

        }

另附其他方案: Nginx限制某个IP同一时间段的访问次数 nginx webcache配置 http://blog.sina.com.cn/s/blog_664553710100zmxr.html
使用 Nginx 反向代理解决跨域问题是种常见且有效的方式,其核心思想是将前端请求统发送到与前端同源的 Nginx 服务器,再由 Nginx 代理请求转发到后端服务,从而绕过浏览器的同源策略限制。 ### Nginx 配置的基本思路 - **前端请求统指向 Nginx**:前端应用的所有请求都指向 Nginx 所在的域名和端口。 - **Nginx 转发请求到真实后端**:Nginx 根据 URL 路径匹配规则,将请求转发到对应的后端服务器。 - **隐藏后端地址**:前端无需直接访问后端域名,从而避免跨域问题。 ### Nginx 配置示例 以下是个典型的 Nginx 配置片段,用于解决跨域问题: ```nginx server { listen 80; server_name www.example.com; location /api/ { proxy_pass http://backend.example.com:8080/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } } ``` 在这个配置中: - 前端请求 `/api/` 开头的接口时,Nginx 会将请求转发到 `http://backend.example.com:8080/`。 - 所有请求都通过 `www.example.com` 域名发出,与前端页面同源,从而避免了跨域问题[^2]。 ### 处理 Cookie 跨域写入问题 如果需要在跨域场景下写入 Cookie,可以通过 Nginx 设置响应头来实现: ```nginx location /api/ { proxy_pass http://backend.example.com:8080/; proxy_set_header Host $host; proxy_cookie_domain backend.example.com www.example.com; } ``` 该配置将后端返回的 Cookie 的 `Domain` 设置为前端域名 `www.example.com`,从而允许前端读取和写入 Cookie[^4]。 ### 优势与适用场景 - **优势**: - 无需修改后端代码,仅通过 Nginx 配置即可实现跨域访问。 - 适用于前后端分离架构,尤其在生产环境中部署时较为常见。 - **适用场景**: - 前端部署在 CDN 或静态资源服务器上,无法使用本地开发环境的代理。 - 多个后端服务部署在不同域名或端口下,需要统接入。 ### 与开发环境代理的对比 - **开发环境代理**(如 Webpack Dev Server、Vite 等): - 配置简单,适合本地开发。 - 不能用于生产环境,仅作为调试用途。 - **Nginx 反向代理**: - 更适合生产部署。 - 提供更高的稳定性和性能保障。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值