运维向 2
Nginx 不接受带下划线 header 的问题
最近接了一个下云的项目,把10个甚至9个”微“服务移动至本地,没想到最后还要被 Nginx 坑一把,这里介绍一下 debug 过程。
首先是项目 auth 模块是正常的,Login Request 正常返回 access_token 还有 refresh_token 。
然后登录后查询接口的情况都是 401 的状态,服务端也看不到什么相关错误日志,然后试着直接请求源站,是正常的。
于是看了下 header 情况,调试四五轮后,发现了 header 不标准的问题。
这里部分 header 用了下划线作为连接,在我之前经验里几乎没有碰到过下划线:
因此猜测我现在使用的 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