使用Nginx过滤OPTIONS请求,避免后台大量204响应

使用Nginx过滤OPTIONS请求(204)

在前后端分离项目中,由于跨域,导致前端每次请求后台都会发送一个options请求去检查目标站点是否可达,这样后台就会收到很多响应码为204OPTIONS请求,虽然每次请求都耗时极少,但是一旦请求量大了,还是会占用部分连接资源,并且日志中也会存在很多没用的数据,导致日志文件体积增加。下面就来讲讲如何利用Nginx拦截这些OPTIONS请求

拦截请求之前

浏览器的请求信息

可以看到每个200响应之前都有一个204响应,耗时也就几毫秒,但是就是看它不爽。

同样服务器端的日志是一个204响应一个200响应

Nginx配置

location /{
    if ($request_method = 'OPTIONS') {
        # 对于OPTIONS,不保存请求日志到日志文件
        access_log off;

        # 这里配置允许跨域的域名,* 代表所有,也可以写域名:http://www.xxx.com 或者IP+端口 http://192.168.1.10
        add_header 'Access-Control-Allow-Origin' '*';
        # 允许的请求类型
        add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS';
        add_header 'Access-Control-Allow-Credentials' true;
        add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
        # 允许跨域的最大时间,超过这个时间又会重发一次OPTIONS请求获取新的认证
        add_header 'Access-Control-Max-Age' 1728000;
        add_header 'Content-Type' 'text/plain charset=UTF-8';
        add_header 'Content-Length' 0;
        # 直接在这里返回204响应,不转发到后台服务程序
        return 204;
    }
    # 原来怎么写这里还怎么写
    ...
}

层级如下图

最后的效果

前端依然会发送OPTIONS请求,因为要判断请求是否可达

但是后台的日志中没有OPTIONS请求了,因为请求到Nginx那被拦截了,直接就返回浏览器了,没有到达后台服务程序

大功告成!!!

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Nginx是一个流行的开源Web服务器软件,它提供了许多配置选项来定制其行为和性能。以下是一些常见的Nginx配置选项: 1. worker_processes:指定Nginx使用的worker进程数。默认情况下,Nginx使用单线程,但可以通过增加worker_processes来提高性能。 2. worker_connections:指定每个worker进程可以接受的并发连接数。默认值通常足够处理大多数Web服务器的需求。 3. keepalive_timeout:指定保持客户端连接的超时时间。启用keepalive功能后,Nginx可以同时处理多个请求,减少了建立和关闭连接的开销。 4. server_tokens:控制Nginx响应中发送的版本信息。默认情况下,Nginx会发送版本信息以帮助诊断问题,但可以根据需要禁用它。 5. server_name:指定服务器用来识别请求的主机名或域名。可以在多个域名之间使用逗号分隔它们,以便支持多个域名。 6. server_headers_buffer_size:指定用于缓存响应头部的缓冲区大小。这可以提高性能并减少内存使用。 7. gzip:启用或禁用gzip压缩,以减少传输的数据量并提高页面加载速度。 8. proxy_buffer_size 和 proxy_buffers:这些选项用于配置代理请求的缓冲区大小,以提高性能和响应速度。 9. fastcgi_connect_timeout, fastcgi_send_timeout, fastcgi_read_timeout, fastcgi_send_buffer_size, fastcgi_read_buffer_size:这些选项用于配置FastCGI服务器(如PHP-FPM)的连接、发送和读取超时时间和缓冲区大小。 10. limit_req_zone:用于定义请求限制区域,可以用于限制同时连接数或请求速率。 这只是Nginx配置选项的一部分,还有许多其他选项可用于定制Nginx的行为和性能。建议查阅Nginx官方文档以获取更详细的信息和配置示例。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值