clips 4

运维向 2

Nginx 不接受带下划线 header 的问题

最近接了一个下云的项目,把10个甚至9个”微“服务移动至本地,没想到最后还要被 Nginx 坑一把,这里介绍一下 debug 过程。
首先是项目 auth 模块是正常的,Login Request 正常返回 access_token 还有 refresh_token 。
然后登录后查询接口的情况都是 401 的状态,服务端也看不到什么相关错误日志,然后试着直接请求源站,是正常的。

于是看了下 header 情况,调试四五轮后,发现了 header 不标准的问题。
这里部分 header 用了下划线作为连接,在我之前经验里几乎没有碰到过下划线:
postman

因此猜测我现在使用的 Nginx proxy 后会丢弃非标准的 http header,于是向 chatgpt 求助:

于是知道了有个配置:

underscores_in_headers on;

可以让 Nginx 接受下划线的 header…

想到 Nginx 都用了至少10年了,第一次知道这种东西

OpenWrt wan 访问 luci

/etc/config/uhttpd

option rfc1918_filter '0'

改成

option rfc1918_filter '1'

/etc/config/firewall

最后一行后面追加:

config rule
        option name             allow-http
        option src              wan
        option proto            tcp
        option dest_port        80
        option target           ACCEPT

开 ssh (dropbear) 同理:

config rule
        option name             allow-ssh
        option src              wan
        option proto            tcp
        option dest_port        22
        option target           ACCEPT

重启服务

/etc/init.d/firewall restart
/etc/init.d/uhttpd restart