新 WordPress 发布失败的解决办法

在 WordPress 升级更新区块样式的编辑器之后,很多人就会惊喜地发现自己无法更改和发布新的文章了。通过“工具 – 站点健康”的检查可以发现,是 RestAPI 出现了问题,会显示 404 Not found。这两个问题的关联性在于 WordPress 的新的编辑器会使用 RestAPI 来保存文章。

在搜索一番之后,中文博客中记载的解决方法是使用 classic editor 插件,这个插件似乎不会调用到 RestAPI,所以能够正常的发布文章。但是既然 WordPress 更新了这么炫酷的编辑器,为什么不用呢。而且 RestAPI 这个问题放在这里一直会是个问题,现在是编辑器出问题,以后不好说别的地方不会出现问题,所以要从根本解决。

参考 Stack Overflow 上的回答,应该先尝试一线在 404 的 url 前加一个 index.php,以我的域名为例就是 https://www.mrwhoami.com/index.php/wp-json/wp/v2/types/post。如果依然 404,应该先参考这个链接。如果能够访问,那么应该启用 mod_rewrite。

网上的回答就到此为止了,然而就我的网站而言,我已经启用了 mod_rewrite,并且项目目录下的 .htaccess 也很正常。在找不到具体原因的情况下,结合在路径中间增加 index.php 就能访问的事实,我目前的解决方案是在“设置-固定链接”里自定义固定链接,就在中间增加 index.php。这样一来在牺牲了少许链接美观之后,完美的启用了 RestAPI,编辑器也恢复了正常。当然,如果以后发现更好的办法,我还会继续跟进。

搭建使用 Let’s Encrypt 的 Git 服务网站

目标

  • 搭建一个私有的 Git 服务网站用于存放作业等非公开项目
  • 不需要开放注册,最好有 HTTPS
  • 邮件通知最好是有的(其实没有也无所谓)

使用的主要服务及软件

  • Apache2:网站服务器软件
  • Let’s Encrypt:免费 HTTPS 证书源
  • Gogs:Git 服务网站

搭建流程

    1. 参考 Gogs 官方文档搭建好 Gogs 服务,先使用自带的网页服务测试是否能够正常运行 Gogs。
    2. 安装 Apache 2 用于提供网页服务,能显示出来刚装好的示例页面就可以,这里还涉及不到转发。使用 Apache 2 而不是直接利用 Gogs 自带的网页服务的理由主要有两点:
      • 80 端口和 443 端口只能被 root 用户利用,所以使用 git 用户运行的 Gogs 无法直接使用 80 或 443 端口,虽然该问题可通过配置 iptables 转发进行解决,但是转发却无法解决下面的问题;
      • 想要通过 Let’s Encrypt 的 bot 简单直接的获取证书,他的 bot 会注入一个网页来验证网站的所有者,如果使用 Gogs 自带的网页服务需要手动插入一个网页然后再手动验证,十分麻烦,使用 Apache 是最简单直接的方法,全自动一步到位,git 证书到手。
    3. 使用 Let’s Encrypt 的 Bot 为网站获取证书,跟着他官网教程走就好。(在这里我选的是把所有 HTTP 服务重定向到 HTTPS,所以之后修改网页代理我也只修改了 <name>-le-ssl.conf)。
    4. 为 Apache 启用 proxy 和 proxy_http 插件。
    5. 修改虚拟主机的配置,为 Apache 添加反向代理,主要是添加下面四行(7480 是我设置的 Gogs 网页服务的端口,可以根据需求修改):
      ProxyPreserveHost On
      ProxyRequests off
      ProxyPass / http://127.0.0.1:7480/
      ProxyPassReverse / http://127.0.0.1:7480/
      
    6. 修改 Gogs 配置,把涉及端口和协议的部分修改好,主要是下面的几个,域名和端口看情况修改:
      [server]
      PROTOCOL         = http
      HTTP_PORT        = 7480
      DOMAIN           = git.mrwhoami.com
      ROOT_URL         = https://git.mrwhoami.com/
      
    7. (可选)为 Gogs 添加开机启动服务,参考官方 FAQ
    8. 重启 Gogs 服务和 Apache2 服务。

注意事项

  • 每次修改 Apache 2 的配置记得 restart 或者 reload 服务。
  • Email 可以通过配置 SMTP 解决,也是参考 Gogs 官方文档就好,发不出去有可能是VPS 或者 IPS 给屏蔽了,请联系服务提供商。
  • Gogs 配置里的 Protocol 依然是 HTTP,实际 HTTPS 是由 Apache 验证的。Gogs 的本地端口可以通过防火墙限制外来访问,这样外部就只存在 HTTPS 或者 SSH 访问了。

辣鸡阿里云:关于ECS服务器无法发送邮件的原因及解决办法

本来阿里云用的还是挺愉快的,但是今天的这件事让我彻底转变了看法:辣鸡阿里云!

事情是这个样子的,我搭建了一个 WordPress 网站,使用阿里云的 ECS 服务器。这个网站是一个购物网站,那么自然就要有注册用户,注册用户就要发送验证邮件,于是我就开始了我的邮件服务器工程。

首先我想到的是自己搭建一个服务器,使用 Postfix,然而搭建好之后无论如何都发送不出去邮件,显示的是 SMTP 连接超时。上网寻找解决方案,包括反复地检查 Postfix 的配置、检查 iptables 配置、检查阿里云安全组策略(网上有人提到了这个设置,但在这里这并不是关键),尝试后均无果而终,一下午就这样过去了。

然后我决定使用第三方的 SMTP 服务器发邮件,既然我自己搭不起来我就用别人的嘛。但是同样,超时,发不出去,继续搜索解决方案。就在这时,我看到论坛里有人提到遇到这种问题推荐阅读一片标题名字大概是《阿里云无法发送邮件的解决方案的文章》。虽然这个帖子里的链接已经失效了,但我已经发现了解决思路,那就是阿里云有问题

查阅《云平台安全规则》,我发现里面有这样一条:

3、未经阿里云授权报备,不得将云产品用作邮箱服务器或用于连接第三方邮箱服务器。

啊哈,这就是原因了,辣鸡阿里云。具体分析之后发现,阿里云过滤了所有目标地址端口是 SMTP 端口也就是 25 端口的包,并不是封锁了你的出口,所以你更改你自己 Postfix 的出口端口应该是没什么作用的,所以直接设置的第三方 SMTP 也是用不了的。

那么怎么解决呢?也很简单,使用 SSL 登陆第三方 SMTP 服务器即可。具体怎么设置取决于你自己用的什么软件了。

最后总结,辣鸡阿里云!一个网站要发送几封验证邮件和提醒邮件是多么正常且正当的需求,这你都封锁。本地不让搭就算了,第三方还不让用,搞什么啊。不推荐使用阿里云,以上。