Typecho 登录返回 302 的解决方法

之前学校要开课就拿 Typecho 糊了一个小网站拿来配合,今天发现登不上去了感觉非常离谱。
F12 抓包看了一下发现登录返回了 302 而且没有附带报错信息,非常非常的离谱。
查了一下文档,没有查到(不过也正常,ty 文档约等于空气)。
研究了一下发现:
修改 Typecho 根目录下的config.inc.php`,添加这么一行:

1
define('__TYPECHO_SECURE__', true);

然后清除一下缓存,他就好了。
总之就是非常离谱

修复跨域 (CORS) 问题

如果你在进行前后端分离的开发时发现在测试环境内没有任何问题,而一上生产环境就会出现前端根本无法向后端发出请求的问题,那么恭喜你,你成为了万恶的CORS的受害者之一!!!
你可以按F12打开开发者工具,选择网络选项卡,按F5刷新网页。不出意外的话你会看见一长串的CORS Error。同时,控制台也会输出错误。

什么是 CORS

@> 跨源资源共享 (CORS)(或通俗地译为跨域资源共享)是一种基于 HTTP 头的机制,该机制通过允许服务器标示除了它自己以外的其它origin(域,协议和端口),这样浏览器可以访问加载这些资源。跨源资源共享还通过一种机制来检查服务器是否会允许要发送的真实请求,该机制通过浏览器发起一个到服务器托管的跨源资源的”预检”请求。在预检中,浏览器发送的头中标示有HTTP方法和真实请求中会用到的头。
跨源HTTP请求的一个例子:运行在 https://domain-a.com 的 JavaScript 代码使用 XMLHttpRequest 来发起一个到 https://domain-b.com/data.json 的请求。
出于安全性,浏览器限制脚本内发起的跨源HTTP请求。 例如,XMLHttpRequest 和 Fetch API 遵循同源策略。这意味着使用这些 API 的 Web 应用程序只能从加载应用程序的同一个域请求 HTTP 资源,除非响应报文包含了正确 CORS 响应头。
@>
@> 来源: 跨源资源共享(CORS) - HTTP | MDN

如何修复

如果你使用了支持修改返回头的CDN,你可以直接在CDN侧配置。
CDN侧添加如下四个返回头:

标头名称
Access-Control-Allow-Methods GET,POST,HEAD,OPTIONS
Access-Control-Allow-Origin *
Cross-Origin-Opener-Policy cross-origin
Cross-Origin-Resource-Policy cross-origin
如果你没有使用CDN,那么直接在Nginx配置文件中写规则即可。

【瞎折腾】自建支持分线路解析的权威域名服务器

[post cid=”21” /]
接上文,使用 PowerDNS 搭建根服务器后,我又想尝试搭建权威域名服务器。

首先说一下我的观点:自建权威域名服务器犀利而无用。他要求高昂的成本但几乎没有回报。我的权威域名服务器是在两台我弃用的服务器上搭建的,因此可以无视成本。但我不建议各位这么做。

利用 PowerDNS 的 Lua 支持,我们可以轻松的搭建出一套支持分线路解析的 GeoDNS 服务器。
需要:

  • 一个 Maxmind 账户
  • 至少两台 VPS 服务器(目前域名服务商要求最少需要两个权威域名服务器)

配置地理信息库

  1. Maxmind 官网 获取账户的密钥,需要密钥来更新数据库。
  2. 安装geoipupdate 工具。
1
apt install geoipupdate
  1. 创建文件夹/etc/geoip,并修改/etc/GeoIP.conf
1
2
3
4
AccountID [账户编号]
LicenseKey [授权密钥]
EditionIDs GeoLite2-ASN GeoLite2-City GeoLite2-Country
DatabaseDirectory /etc/geoip
  1. 用 Cron 设置上自动更新:
1
2
3
crontab -e
# 加上一行:
0 0 * * 0 /usr/bin/geoipupdate
  1. 安装 GeoIP 后端
1
apt install -y pdns-backend-geoip
  1. 修改配置文件/etc/powerdns/pdns.conf
1
2
3
enable-lua-records=yes
launch=gmysql,geoip
geoip-database-files=/etc/geoip/GeoLite2-City.mmdb

配置 GeoDNS

在 PowerDNS Lua 中,用户的 IP 地址作为一个变量bestwho存在。不过如果用户的 DNS 服务器没有告知上游服务器用户的地址,那么bestwho就会指向 DNS 服务器的地址。
PowerDNS 提供了一个 lua 函数pickclosest,该函数从一个 IP 列表中选择离bestwho地理位置最近的服务器返回。
还有一个函数country,可以分辨国家。
两者的使用:

1
2
A "pickclosest({'1.1.1.1','8.8.8.8','114.114.114.114','223.5.5.5'})"
A ";if(country('CN')) then return '223.5.5.5' else return '1.1.1.1' end"

自建 DNS 根服务器

前言

今天晚上博主突发奇想:既然根域名服务器的存根文件是公开的,那为什么不自建一个呢?使用现有的资源,我们完全可以在短时间内自己搭建一个 DNS 根服务器,并且让你的递归 DNS 使用它。

DNS 解析原理

  1. 你打开电脑上的浏览器,输入了https://www.baidu.com/想要访问网页。此时你的浏览器会将你输入的 URL 中的域名取出,并根据你设置的系统 DNS 请求到域名服务器。
  2. 域名服务器检查自身缓存是否存在www.baidu.com.的记录,如存在则直接返回,如不存在则继续请求下去。
  3. 域名服务器向根域名服务器发出query www.baidu.com.请求,根服务器返回了.com顶级域名的顶级域名服务器地址a.gtld-servers.net.
  4. 域名服务器向顶级域名服务器发出query www.baidu.com.请求,得到baidu.com权威域名服务器地址dns.baidu.com
  5. 域名服务器向权威域名服务器发出query www.baidu.com.请求,得到www子域的解析记录。
  6. 重复以上步骤,直到得到可被用于请求的 IP 地址。并将其存入缓存后返回给客户端。如无记录,则根据域名状态返回错误码。
  7. 你的浏览器得到了 IP地址,向它发送请求。服务器返回页面。

到上述第六步时,DNS 解析过程就已经完成了。看似复杂,实则只在几十毫秒内。

自建 DNS 根服务器

目前可选的 DNS 服务器程序很多,例如广为人知的PowerDNSBIND9。本文选择了PowerDNS作为服务器程序。

  1. 安装 PowerDNS: apt install pdns-server pdns-backend-mysql
  2. 修改它的配置文件,使其支持BIND格式的 zone 文件。
    vim /etc/powerdns/pdns.d/bind.conf
1
2
3
4
launch=bind
bind-config=/etc/powerdns/bind.conf
bind-check-interval=60
bind-ignore-broken-records=yes
  1. IANA 下载 root.zone 文件。
  2. 对 root.zone 作一些修改:
  • 删除所有第 1 列是.,并且第 4 列是NS的行。
  • 在最开头添加以下三行:
1
2
.                       86400   IN      NS      root-server.你的域名.
root-server.你的域名. 86400 IN A 你的服务器IP

注意:所有的域名后面的.不可省略!

  • 删除所有第 4 列不是 A,AAAA,SOA,NS 或者 DS 的行(这些记录与 DNSSEC 有关,而我们的更改会破坏 DNSSEC,因此直接删除即可)。
1
2
mv root.zone root.zone.bak
cat root.zone.bak | awk '{if ($4=="A" || $4=="AAAA" || $4=="SOA" || $4=="NS" || $4=="DS") print $0}' > root.zone

如果有多台服务器要成为根服务器,重复以上步骤几次即可。
5. 新建/etc/powerdns/bind.conf文件,添加如下内容。

1
zone "." { type native; file "/etc/powerdns/root.zone"; };
  1. systemctl restart pdns重启 PowerDNS 服务器。

验证你的成果

  1. 运行dig @你服务器 IP,应当会得到如下回复(其中root-server.omn.cc是我设置的域名):
    结果
  2. 运行dig @你服务器IP www.example.com,得到如下回复:

    ;; AUTHORITY SECTION:
    com. 172800 IN NS m.gtld-servers.net.
    com. 172800 IN NS l.gtld-servers.net.
    com. 172800 IN NS k.gtld-servers.net.
    ……

    ;; ADDITIONAL SECTION:
    m.gtld-servers.net. 172800 IN AAAA 2001:501:b1f9::30
    m.gtld-servers.net. 172800 IN A 192.55.83.30
    l.gtld-servers.net. 172800 IN AAAA 2001:500:d937::30
    l.gtld-servers.net. 172800 IN A 192.41.162.30
    ……

恭喜!你的根服务器已经搭建好了!

使用你的根服务器来进行递归解析

有了根服务器,接下来就可以配置你的递归 DNS 服务器,让它们使用你自己的根服务器完成解析了。
将你在root.zone文件里自己添加的两行/三行(如果你有IPV6)内容保存为roots.hint文件,传到你的递归 DNS 服务器上去。
然后在 PowerDNS Recursor 的配置文件中新加一行:

1
hint-file=/etc/powerdns/root.hint

如果你开了 DNSSEC 验证,还需要添加一行:

1
lua-config-file=/etc/powerdns/script.lua

然后在/etc/powerdns/script.lua中写入:

1
addNTA(".")

保存后重启 PowerDNS Recursor 即可。

我建站的这三年 - 第三次丢数据后的回忆

建站历程

我是从2020年开始建站的,一开始是使用虚拟主机+DiscuzX建了个小论坛,后来发现没啥人又关了用wordpress。2020年10月正式选择了typecho+handsome这样的组合来搭建个人博客。第一次搭建的博客存活了大概一年,一年后服务器到期我也无心再维护,因此就跑了。(不过那个时候还没有用这个域名)。

9941y.top这个域名被启用是2022年的时候,我又萌生了建博客想法,于是就用这个域名(别人手里买来的)来建站,建站的结果就是之前陪伴了各位将近一年半的Sh1zuku的小屋

在2023年10月16日,我的上游服务商有人离职删库,把我的数据删了😅所以那个神奇の小网站就不服存在了,取而代之的是这个网站!

建站回忆

重建之后回头看看2020年至今三年来我走过的路,不得不感叹三年里我确实成长了好多。从一个啥也不会的小白变成了一个会一点但不多的小白。这三年里有无数帮助我的群友和路人,其中一部分成为了我很好的朋友或合作伙伴,也有一部分成为了被我厌恶、唾弃的人。我2020年-2021年曾和一群人一起开“业务”(小学生最爱的那些IDC之类的)。现在再找上他时发现他成为了我并不喜欢的那种人。

总结

我文笔不好,想说的很多,写下来就只有这点了。三年来我结交了很多的朋友,这三年也塑造了现在的我。

如果没有这三年,我现在可能会在一个更好的学校(四校八大?),但这绝不是我想要的。现在这样自由自在的生活就刚刚好~

感谢那些陪了我三年的朋友以及愿意停下来看这篇文章的陌生人~

博客复活

博客服务器被服务商删除了数据,所以之前的文章都丢失了😥😥😥

不过好在我已经找到了可靠的服务商,可以继续运行博客了。

详细事件经过将在本周末另开一篇文章。

我会在周末恢复友链,如有遗漏请联系我

附上博客复活后的截图:复活啦!

Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×