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块中引用上面的配置文件。 ...

April 8, 2025 · 4 min · Flandre

解决从自建gitea仓库请求资源被浏览器corb的问题

自建gitea仓库后,为提高网站速度以及充分利用gitea仓库,故将网站资源镜像到仓库。 在网站请求仓库资源时,被浏览器corb(Cross-Origin-Read-Blocking)。 需要从两个方向解决此问题,允许空请求头跨域以及正确配置mime type。 正确设置跨域 在gitea的配置文件app.ini中添加如下代码 [cors] ENABLED = true ALLOW_DOMAIN = * 并且nginx反代配置文件应该做如下编写来允许空请求头跨域 server { ...#location外的自己配置,主要是location内的内容 location / { client_max_body_size 512M; proxy_pass http://localhost:3000; # 假设 Gitea 运行在 localhost:3000 add_header 'Access-Control-Allow-Origin' '*'; add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'; add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization'; add_header 'Access-Control-Allow-Credentials' 'true'; if ($request_method = 'OPTIONS') { add_header 'Access-Control-Allow-Origin' '*'; add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'; add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization'; add_header 'Access-Control-Allow-Credentials' 'true'; add_header 'Access-Control-Max-Age' 1728000; add_header 'Content-Type' 'text/plain charset=UTF-8'; add_header 'Content-Length' 0; return 204; } } } 正确设置mime type 由于浏览器会阻止mime type不匹配的资源的加载,翻阅gitea官方配置文件文档,只需要正确设置mime type就可以解决corb问题。 ...

September 21, 2024 · 1 min · Flandre