#635 Nginx proxy-set-header

2022-02-22

线上环境 HTTP 服务有报获取不到 Host 信息。应该是域名,但是拿到的是 backend 这样的名字。

我第一反应肯定是 Nginx 的配置问题,我印象中 Nginx 给 upstream 转发的请求就会设置 Host 为 upstream 名称。

但是我检查了 Nginx 的配置 (nginx.conf), 在 http 这一层的配置中有 proxy_set_header Host $http_host;

不过搜索 proxy_set_header 的时候发现,在 server 这一层设置了 proxy_set_header X-Forwarded-For $remote_addr;, 这个头在 http 这一层也设置了,没必要在设置的。

我就想到,会不会下层设置头会覆盖上一层的所有头设置。

在 Nginx 文档 (proxy_set_header) 中查到:

Allows redefining or appending fields to the request header passed to the proxied server.
The value can contain text, variables, and their combinations.
These directives are inherited from the previous configuration level if and only if there are no proxy_set_header directives defined on the current level.

当本层没有 proxy_set_header 指令的时候,才会继承上一级的 proxy_set_header 指令。

将 server 层重复的这个设置拿掉,果然就好了。

#634 我的中年危机

2022-02-21

已经 30 几了,生活一团糟。

如果能有些事业,好歹有一个方面可以让我感受到自己的价值,至少可以分散一下注意力。可是,也没有,反而也是个令人糟心的事,让我常有髀肉复生之叹,感觉人生就要荒废。

我感觉我在一个漩涡中无法自拔,想逃离却又不能逃离。我不知道该怎么做。我时常想起《阿甘正传》中珍妮的祈祷。

这个可能就是中年危机的前兆吧!

#628 2022 BUG

2022-01-28

前些天应该都看过微软 Exchange Server 开发者跨年改 BUG 的新闻了吧 (相关链接)。

Exchange Server 的邮件过滤器采用了 yymmddHHMM 格式的时间,存储在 long 类型字段中。
PS: 微软的 C++ Compiler 会将 long 当做 32 位 int。

32 位有符号整形能够表达的范围:[$-2^{31}$, $2^{31} - 1$],也就是 [-2147483648, 2147483647]。

到了 2022 年,就会超出范围,比如 2022-01-01 12:00:00, 会被存储为 2201011200,会超出 signed int 的表达范围。

2147483647
2201011200 # 超出

可能有一些系统采用 int 类型存储 yymmdd + 4 位数字做编号的方式,比如 2101011234。
相同的原因,到了 2022 年,就行不通了。

2147483647
2201011234 # 超出

最好的办法是改成 long long, 或者 unsigned int

PS: Linux 下的 C/C++ 编译器——GCC、CLang/LLVM 都是将 long 当做是 64 位。

参考资料与拓展阅读

#627 新东方英语词典备份

2022-01-25

听说沪江英语出于合规的考虑,APP 中下线了中小学英语词书。
我赶紧检查一下我之前的新东方英语词典的脚本, 检查一下,把没有的爬一份。主要是我今年准备全面学习一下英语,从小学阶段开始,要是到时候小学词典都弄不到就 BBQ 了。

#623 输入法

2022-01-19

我用的最多的输入法:

  1. 搜狗
    搜狗在中文输入法方面确实是做的不错,没得说。
  2. 百度
    百度输入法是小米自带(我是一个资深小米用户),有时懒得换也就用了。而且百度输入法还有一个好的地方,就是如果手机接入物理键盘后,它会只显示一个横条,不占界面。
  3. RIME
    RIME 是我在 Linux 上的输入法, 一转眼就用了好几年了。

RIME 是一个开源项目,没有搜狗、百度那样的云服务(那种智能的全句输入)支持,在使用方面不如他们顺手,本地词库也确实有些单薄。话说回来,也够用了,几年的真实感受。

而且一旦习惯了 Linux 的折腾,这种全部在自己的掌控之中的感受就很上瘾。你要是熟悉 RIME 的话,你就懂我说的了,词库全部在掌握之中。
PS: Ubuntu 中的 IBUS 智能拼音(libpinyin/ibus-libpinyin)也是可以自己控制词库。

搜狗和百度都是封闭的,他们的用户词库都不支持导出(加密的不算)。我常常觉得要是可以把搜狗和百度中的词库导入 RIME 就好了。他们自己弄的那些个词库就不指望了,只是希望可以把我输入的那部分给我。

最近发现讯飞输入法效果不错,不输搜狗和百度,而且支持导出词库(目前只发现手机端可以导出,PC 端我已经在线反馈,等回复中)。

现在已经全部切入讯飞输入法。
PS: 讯飞的词库和搜狐比差太多,不见得比 Rime 强多少,但我相信运行一段时间之后会越来越好的。

关于讯飞输入法在 Debian/Ubuntu 上的安装

# Index of /deepin/pool/non-free/i/iflyime/
# ../
# iflyime_0.9.972_amd64.deb                          18-Dec-2019 13:31     27M
# iflyime_0.9.988_amd64.deb                          14-May-2020 17:49     49M

wget http://packages.deepin.com/deepin/pool/non-free/i/iflyime/iflyime_0.9.988_amd64.deb -P ~/Resources

gdebi ~/Resources/iflyime_0.9.988_amd64.deb
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Reading state information... Done
此软件包不可安装
Dependency is not satisfiable: fcitx-frontend-qt4

看起来是 Qt4 被砍掉了的缘故,应该可以解决。但是从上一次发版(2020/05/14)到现在已经一年半了,没有出新版本,可能是讯飞输入法 Linux 版项目被停了,所以就算了吧。