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

pve 中自定义证书

参照: https://pve.proxmox.com/wiki/Certificate_Management
For options 2 and 3 the file /etc/pve/local/pveproxy-ssl.pem (and /etc/pve/local/pveproxy-ssl.key, which needs to be without password) is used.

于是我们手动执行证书更新脚本增加几行即可:

cp xxx.crt /etc/pve/local/pveproxy-ssl.pem
cp xxx.key /etc/pve/local/pveproxy-ssl.key
systemctl reload pveproxy.service

另外注意:
Do not replace or manually modify the automatically generated node certificate files in /etc/pve/local/pve-ssl.pem and /etc/pve/local/pve-ssl.key or the cluster CA files in /etc/pve/pve-root-ca.pem and /etc/pve/priv/pve-root-ca.key.

这两个应该是 pve 内部沟通用的 key 什么的,千万不要改这两个,改 pveproxy-ssl 才对