<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Gitea on 芙兰の小窝</title>
    <link>https://flandre.vip/tags/gitea/</link>
    <description>Recent content in Gitea on 芙兰の小窝</description>
    <generator>Hugo</generator>
    <language>zh-cn</language>
    <lastBuildDate>Tue, 08 Apr 2025 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://flandre.vip/tags/gitea/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>gitea反代限制跨域,防盗链,以及缓存优化</title>
      <link>https://flandre.vip/posts/gitea_nginx/</link>
      <pubDate>Tue, 08 Apr 2025 00:00:00 +0000</pubDate>
      <guid>https://flandre.vip/posts/gitea_nginx/</guid>
      <description>&lt;h2 id=&#34;引言&#34;&gt;引言&lt;/h2&gt;
&lt;p&gt;起初在我的&lt;a href=&#34;https://sstl.scarle7.tech/&#34;&gt;服务器探针&lt;/a&gt;检测到我专门用来部署网站服务的机子经常有异常负载以及带宽。 &lt;img alt=&#34;异常负载&#34; loading=&#34;lazy&#34; src=&#34;https://oss.flandre.vip/2025/04/08/236664A1-96C1-4ECB-9450-6EEEFB12C7AA.jpg&#34;&gt; 在关闭全部服务之后逐一排查发现，仅开启gitea docker服务的时候，并没有异常负载，开启除了gitea反代外的服务之后也没有异常负载，但当开启了gitea反代nginx配置文件之后，马上就可以监测到服务器的带宽占用以及时常爆满的cpu利用率。 查看nginx访客日志 &lt;img alt=&#34;访客日志&#34; loading=&#34;lazy&#34; src=&#34;https://oss.flandre.vip/2025/04/08/27C6CDBC-D9AC-4803-B399-CF7E1DF19484.jpg&#34;&gt; 如上图所示，有很多bot(爬虫)在爬取我的gitea内容，回顾以前的操作，我在gitea上拉取过一些静态资源(fontawesome之类的)，并将仓库属性设置为镜像，还开启了定时拉取。此操作的目的是将自己主网站的资源转到自己的gitea以加快访问速度。但就是这一操作，反复拉取以及设置镜像的过程让那些合法爬虫定位到了我的gitea目录。这些bot大多数都是大公司的,比如openai,Amazon,claude。 不管出于什么目的，我并不希望自己的gitea被反复无效的get占用带宽以及负载资源。因此我便为了解决这个问题做了一些折腾由此还引出了其他方面的折腾，比如跨域限制，防止盗链等等。 果然，生命在于折腾啊(雾 首先解决爬虫问题。 由于这些合法爬虫是遵守君子协议即&lt;code&gt;robots.txt&lt;/code&gt;的，所以我们可以配置&lt;code&gt;robots.txt&lt;/code&gt;放在网站的根目录。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-txt&#34; data-lang=&#34;txt&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;User-agent: *
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Disallow: /
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;User-agent&lt;/code&gt;字段设置规则匹配的bot，&lt;code&gt;*&lt;/code&gt;是匹配所有bot。 &lt;code&gt;Disallow&lt;/code&gt;字段设置不可访问的目录，&lt;code&gt;/&lt;/code&gt;即不可访问所有目录。 但是我反代gitea的nginx配置文件主&lt;code&gt;location&lt;/code&gt;反代到了&lt;code&gt;http://localhost:3000&lt;/code&gt;，因此是打不开&lt;code&gt;/robots.txt&lt;/code&gt;文件的，要放在所有&lt;code&gt;location&lt;/code&gt;前的配置文件如下&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-nginx&#34; data-lang=&#34;nginx&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;location&lt;/span&gt; = &lt;span style=&#34;color:#e6db74&#34;&gt;/robots.txt&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;root&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;/path/to/your/domain&lt;/span&gt;;  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;try_files&lt;/span&gt; $uri =&lt;span style=&#34;color:#ae81ff&#34;&gt;404&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;好了，引言结束，在完成以上操作后的2-3天，合法爬虫确实不爬取我的网站了，带宽负载均恢复正常。 按理说应该打住结束这次探索了对不对？ 可是，生命在于折腾啊!。 不继续折腾下去总觉得哪里不完美哪里不完善。 进入正文，为了让我的gitea资源只允许我自己的网站请求资源，需要做跨域限制以及防止盗链处理。&lt;/p&gt;
&lt;h2 id=&#34;nginx主配置文件&#34;&gt;nginx主配置文件&lt;/h2&gt;
&lt;p&gt;首先修改nginx主配置文件，为了配置区分，在&lt;code&gt;/.../nginx/customize/&lt;/code&gt;专门新建一个&lt;code&gt;gitea.conf&lt;/code&gt;配置文件&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-nginx&#34; data-lang=&#34;nginx&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;# 缓存路径配置，路径按自己实际情况填写。
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;proxy_cache_path&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;/path/to/your/domain/cache&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e6db74&#34;&gt;levels=1:2&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e6db74&#34;&gt;keys_zone=GITEA_CACHE:256m&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e6db74&#34;&gt;inactive=7d&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e6db74&#34;&gt;max_size=10g&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e6db74&#34;&gt;use_temp_path=off&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;# 动态缓存控制映射
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;map&lt;/span&gt; $request_method $skip_cache {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;default&lt;/span&gt;     &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;POST&lt;/span&gt;        &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;PUT&lt;/span&gt;         &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;DELETE&lt;/span&gt;      &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;PATCH&lt;/span&gt;       &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;# CORS配置
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;map&lt;/span&gt; $http_origin $gitea_allow_origin {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;default&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;~^https?://(.*\.)?scarle7\.tech(:[0-9]+)?$&amp;#34;&lt;/span&gt; $http_origin;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;~^https?://(.*\.)?flandre\.vip(:[0-9]+)?$&amp;#34;&lt;/span&gt; $http_origin;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;~^https?://git\.scarle7\.tech(:[0-9]+)?$&amp;#34;&lt;/span&gt; $http_origin;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;其中&lt;code&gt;keys_zone&lt;/code&gt;后面的&lt;code&gt;GITEA_CACHE&lt;/code&gt;是定义的变量，&lt;code&gt;gitea_allow_origin&lt;/code&gt;也是，后续配置文件要引用它们。 由于上面的配置内容实际是&lt;code&gt;http&lt;/code&gt;块里的内容，所以在主配置文件&lt;code&gt;nginx.conf&lt;/code&gt;的&lt;code&gt;http&lt;/code&gt;块中引用上面的配置文件。&lt;/p&gt;</description>
    </item>
    <item>
      <title>解决从自建gitea仓库请求资源被浏览器corb的问题</title>
      <link>https://flandre.vip/posts/%E8%A7%A3%E5%86%B3%E4%BB%8E%E8%87%AA%E5%BB%BAgitea%E4%BB%93%E5%BA%93%E8%AF%B7%E6%B1%82%E8%B5%84%E6%BA%90%E8%A2%AB%E6%B5%8F%E8%A7%88%E5%99%A8corb%E7%9A%84%E9%97%AE%E9%A2%98/</link>
      <pubDate>Sat, 21 Sep 2024 00:00:00 +0000</pubDate>
      <guid>https://flandre.vip/posts/%E8%A7%A3%E5%86%B3%E4%BB%8E%E8%87%AA%E5%BB%BAgitea%E4%BB%93%E5%BA%93%E8%AF%B7%E6%B1%82%E8%B5%84%E6%BA%90%E8%A2%AB%E6%B5%8F%E8%A7%88%E5%99%A8corb%E7%9A%84%E9%97%AE%E9%A2%98/</guid>
      <description>&lt;p&gt;自建gitea仓库后，为提高网站速度以及充分利用gitea仓库，故将网站资源镜像到仓库。&lt;/p&gt;
&lt;p&gt;在网站请求仓库资源时，被浏览器corb(&lt;code&gt;Cross-Origin-Read-Blocking&lt;/code&gt;)。&lt;/p&gt;
&lt;p&gt;需要从两个方向解决此问题，允许空请求头跨域以及正确配置mime type。&lt;/p&gt;
&lt;h3 id=&#34;正确设置跨域&#34;&gt;正确设置跨域&lt;/h3&gt;
&lt;p&gt;在gitea的配置文件&lt;code&gt;app.ini&lt;/code&gt;中添加如下代码&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;[cors]
ENABLED = true
ALLOW_DOMAIN = *
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;并且&lt;code&gt;nginx&lt;/code&gt;反代配置文件应该做如下编写来允许空请求头跨域&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;server {
    ...#location外的自己配置，主要是location内的内容
    location / {
        client_max_body_size 512M;
        proxy_pass http://localhost:3000; # 假设 Gitea 运行在 localhost:3000
        add_header &amp;#39;Access-Control-Allow-Origin&amp;#39; &amp;#39;*&amp;#39;;
        add_header &amp;#39;Access-Control-Allow-Methods&amp;#39; &amp;#39;GET, POST, OPTIONS&amp;#39;;
        add_header &amp;#39;Access-Control-Allow-Headers&amp;#39; &amp;#39;DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization&amp;#39;;
        add_header &amp;#39;Access-Control-Allow-Credentials&amp;#39; &amp;#39;true&amp;#39;;
        if ($request_method = &amp;#39;OPTIONS&amp;#39;) {
            add_header &amp;#39;Access-Control-Allow-Origin&amp;#39; &amp;#39;*&amp;#39;;
            add_header &amp;#39;Access-Control-Allow-Methods&amp;#39; &amp;#39;GET, POST, OPTIONS&amp;#39;;
            add_header &amp;#39;Access-Control-Allow-Headers&amp;#39; &amp;#39;DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization&amp;#39;;
            add_header &amp;#39;Access-Control-Allow-Credentials&amp;#39; &amp;#39;true&amp;#39;;
            add_header &amp;#39;Access-Control-Max-Age&amp;#39; 1728000;
            add_header &amp;#39;Content-Type&amp;#39; &amp;#39;text/plain charset=UTF-8&amp;#39;;
            add_header &amp;#39;Content-Length&amp;#39; 0;
            return 204;
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;正确设置mime-type&#34;&gt;正确设置mime type&lt;/h3&gt;
&lt;p&gt;由于浏览器会阻止mime type不匹配的资源的加载，翻阅gitea官方配置文件文档，只需要正确设置mime type就可以解决corb问题。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Debian安装Gitea(Docker)</title>
      <link>https://flandre.vip/posts/debian%E5%AE%89%E8%A3%85gitea%E4%B9%8Bdocker%E4%BD%9C%E6%B3%95/</link>
      <pubDate>Thu, 05 Sep 2024 00:00:00 +0000</pubDate>
      <guid>https://flandre.vip/posts/debian%E5%AE%89%E8%A3%85gitea%E4%B9%8Bdocker%E4%BD%9C%E6%B3%95/</guid>
      <description>&lt;p&gt;[warning]时间:2024年9月5日 环境: Debian 11.11 bullseye with 2vCPU&amp;amp;1707MEM Gitea版本: 1.22.1 Docker版本: 27.2.0 MySQL版本: 8.4.0 [/warning]&lt;/p&gt;
&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;
&lt;p&gt;一些个人的项目以及配置文件，不希望托管在GitHub上。特别是供个人使用的配置文件。 ps:其实这些配置文件可以在GitHub上通过gist托管。 但是不方便管理更新，也不方便在没有魔法的环境下下载。 于是打算搭建属于自己的托管平台。 第一时间想到的是Gitlab，但其占用资源很离谱，在安装过程中直接干爆内存然后调用虚拟内存导致硬盘满读导致服务器卡死😅。 &lt;img alt=&#34;1&#34; loading=&#34;lazy&#34; src=&#34;https://oss.flandre.vip/2024/09/05/1000012499.jpg&#34;&gt; 我也不需要那么多功能，只需要基本代码管理就可以，因此选择了更轻量级的Gitea。&lt;/p&gt;
&lt;h2 id=&#34;安装过程&#34;&gt;安装过程&lt;/h2&gt;
&lt;p&gt;我选择的是docker部署，自备数据库。&lt;/p&gt;
&lt;h3 id=&#34;数据库准备&#34;&gt;数据库准备&lt;/h3&gt;
&lt;p&gt;通过root登录到MySQL&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;mysql -u -root -p
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;创建用于gitea的用户，这里是gitea&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;CREATE USER &amp;#39;gitea&amp;#39; IDENTIFIED BY &amp;#39;passwd&amp;#39;;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;创建数据库&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;    CREATE DATABASE gitea CHARACTER SET &amp;#39;utf8mb4&amp;#39; COLLATE &amp;#39;utf8mb4_bin&amp;#39;; 
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;将数据库上的所有权限授予上述创建的数据库用户&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;    GRANT ALL PRIVILEGES ON gitea.* TO &amp;#39;gitea&amp;#39;;
    FLUSH PRIVILEGES; 
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;安装docker&#34;&gt;安装docker&lt;/h3&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;    curl -fsSL https://get.docker.com -o get-docker.sh
    sudo sh get-docker.sh
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;这会安装软件包里存在的最新版&lt;/p&gt;
&lt;h3 id=&#34;创建用于运行gitea的用户git&#34;&gt;创建用于运行gitea的用户git&lt;/h3&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;adduser \
   --system \
   --shell /bin/bash \
   --gecos &amp;#39;Git Version Control&amp;#39; \
   --group \
   --disabled-password \
   --home /home/git \
   git 
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;准备目录&#34;&gt;准备目录&lt;/h3&gt;
&lt;p&gt;创建一个目录&lt;code&gt;/www/wwwroot/gitea/&lt;/code&gt;并在目录下创建&lt;code&gt;data&lt;/code&gt;文件夹。&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
