gitea反代限制跨域,防盗链,以及缓存优化
引言 起初在我的服务器探针检测到我专门用来部署网站服务的机子经常有异常负载以及带宽。 在关闭全部服务之后逐一排查发现,仅开启gitea docker服务的时候,并没有异常负载,开启除了gitea反代外的服务之后也没有异常负载,但当开启了gitea反代nginx配置文件之后,马上就可以监测到服务器的带宽占用以及时常爆满的cpu利用率。 查看nginx访客日志 如上图所示,有很多bot(爬虫)在爬取我的gitea内容,回顾以前的操作,我在gitea上拉取过一些静态资源(fontawesome之类的),并将仓库属性设置为镜像,还开启了定时拉取。此操作的目的是将自己主网站的资源转到自己的gitea以加快访问速度。但就是这一操作,反复拉取以及设置镜像的过程让那些合法爬虫定位到了我的gitea目录。这些bot大多数都是大公司的,比如openai,Amazon,claude。 不管出于什么目的,我并不希望自己的gitea被反复无效的get占用带宽以及负载资源。因此我便为了解决这个问题做了一些折腾由此还引出了其他方面的折腾,比如跨域限制,防止盗链等等。 果然,生命在于折腾啊(雾 首先解决爬虫问题。 由于这些合法爬虫是遵守君子协议即robots.txt的,所以我们可以配置robots.txt放在网站的根目录。 User-agent: * Disallow: / User-agent字段设置规则匹配的bot,*是匹配所有bot。 Disallow字段设置不可访问的目录,/即不可访问所有目录。 但是我反代gitea的nginx配置文件主location反代到了http://localhost:3000,因此是打不开/robots.txt文件的,要放在所有location前的配置文件如下 location = /robots.txt { root /path/to/your/domain; try_files $uri =404; } 好了,引言结束,在完成以上操作后的2-3天,合法爬虫确实不爬取我的网站了,带宽负载均恢复正常。 按理说应该打住结束这次探索了对不对? 可是,生命在于折腾啊!。 不继续折腾下去总觉得哪里不完美哪里不完善。 进入正文,为了让我的gitea资源只允许我自己的网站请求资源,需要做跨域限制以及防止盗链处理。 nginx主配置文件 首先修改nginx主配置文件,为了配置区分,在/.../nginx/customize/专门新建一个gitea.conf配置文件 # 缓存路径配置,路径按自己实际情况填写。 proxy_cache_path /path/to/your/domain/cache levels=1:2 keys_zone=GITEA_CACHE:256m inactive=7d max_size=10g use_temp_path=off; # 动态缓存控制映射 map $request_method $skip_cache { default 0; POST 1; PUT 1; DELETE 1; PATCH 1; } # CORS配置 map $http_origin $gitea_allow_origin { default ""; "~^https?://(.*\.)?scarle7\.tech(:[0-9]+)?$" $http_origin; "~^https?://(.*\.)?flandre\.vip(:[0-9]+)?$" $http_origin; "~^https?://git\.scarle7\.tech(:[0-9]+)?$" $http_origin; } 其中keys_zone后面的GITEA_CACHE是定义的变量,gitea_allow_origin也是,后续配置文件要引用它们。 由于上面的配置内容实际是http块里的内容,所以在主配置文件nginx.conf的http块中引用上面的配置文件。 ...