分类 疑难杂症 下的文章

Nginx 反向代理流媒体文件出现的加载缓慢问题

事情起因

有个Jellyfin的服务器,前端使用nginx进行反代,正常情况下浏览器访问流媒体文件,会自动分块请求,不需要加载整个文件即可开始播放,但是在前端套一层nginx反向代理以后,要加载很久才显示画面。

问题排查

首先nginx服务器和后端之间并没有网络连接速度慢的问题,排除掉了网络问题,
就首先怀疑是nginx的配置文件,
尝试关闭缓冲:

proxy_buffering off;  
proxy_request_buffering off;

无济于事,仍然播放缓慢。
而且发现一个很奇怪的问题,当浏览器关闭以后,前端已经断开连接了,
但nginx仍然持续不断从后端服务器上读取文件,而且流量巨大,似乎是试图读取整个媒体文件。

最后逐一排查配置项,
最后发现是nginx默认配置了一个缓存区

proxy_temp_path /www/common/proxy/proxy_temp_dir; 
proxy_cache_path /www/common/proxy/proxy_cache_dir levels=1:2 keys_zone=proxy_cache_panel:20m 
proxy_cache proxy_cache_panel; 

此配置导致nginx接收到请求以后,首先查询是否有缓存,有缓存则直接返回,没有缓存会从后端抓取完整文件,然后再返回给客户端。
问题根源也就在这里了。

问题解决

在反向代理配置里,关闭缓存:

proxy_cache off;

apt-get 发生 sub-process - apt-listchanges error 解决办法

起因

将VPS重装为debian 12以后,apt直接无法使用,不论是安装还是升级都提示"Segment Fault"
详情里出现:

sub-process - apt-listchanges error

尝试 :

  1. apt purge -f apt-listchanges
    apt install -f apt-listchanges
  2. dpkg --remove apt-listchanges
    apt install -f apt-listchanges
  3. mv /etc/apt/apt.conf.d/20listchanges /etc/apt/apt.conf.d/20listchanges.bak
    apt update && apt upgrade

修复京东无线宝TF卡分区

背景

手里有个老一代京东无线宝,结果发现更新固件到4.x版本以后,内置存储空间变成了17M,实际应该是64G才对,网上搜索各种办法都没解决,比如开机红灯闪烁的时候戳复位键所谓的低格,然而并没有什么用。

开始折腾

拆机

网上说这个路由器拆开以后,里面负责存储挖豆的缓存设备其实是一个TF卡。于是动手开拆,吐槽一下,这玩意是真难拆,除了表面的螺丝,那个卡扣太反人类了,可能根本就不想让用户拆开。废了九牛二虎之力以后终于拆开了。

定位问题

拆出来TF卡,找了个读卡器,插电脑上。使用Diskgenius打开TF卡分区发现,TF卡被分为了6个分区,前面4个是ext4的分区,第5个分区是一个swap交换分区,然后第最后1个分区文件系统依旧是ext4,对比分区大小发现,最后一个分区的容量刚好是17M,由此可知,系统固件将TF卡的最后一个分区识别为了内置存储空间。然后再往前看,第四个分区居然有50GB+,奇了怪了,按道理应该把第四个分区识别为内置存储空间啊,咋个把最后的“零头分区”识别为内置存储了?

简单粗暴解决

我尝试了一下,直接把swap分区和最后的17M零头分区删除,然后把空间合并到分区4,完成以后把TF卡插回京东无线宝开机,居然神奇般解决了,内部存储空间识别正常了,识别到了50GB+,也开始正常缓存了,指示灯也变绿了,问题解决。唯一的问题就是把swap分区删掉了,不知道会不会对性能有影响

后话

期间没有截图和拍照,只是纯文字记录过程,下次遇到类似问题有个参考。

j4125 软路由折腾日记

ESXi 篇

ESXi下载地址

https://customerconnect.vmware.com/en/evalcenter?p=free-esxi8

ESXi安装的时候提示“Shutting down firmware services...Relocating modules and starting up the kernel...”

在安装程序引导界面出现以后按Shift + O,加入参数

ignoreHeadless=TRUE

即可解决。

ESXi网卡直通以后,爱快无法启动,同时直通的网卡提示“已开启/需要重新引导”

解决办法是在ESXi的 主机 - 管理 - 高级设置 里,将

VMkernel.Boot.disableACSCheck

设置为True。

ESXi核显直通给群晖以后,重启后群晖无法启动,同时核显提示“已开启/需要重新引导”

原因是ESXi开机的时候会强制占用核显,导致直通失效,解决办法是在ESXi的 主机 - 管理 - 高级设置 里,将

VMkernel.Boot.vga

设置为False。

PVE 篇

PVE 如何将img导入磁盘

qm importdisk <虚拟机ID> <img文件路径> local-lvm

PVE 网口直通报错

nano /etc/default/grub

修改GRUB_CMDLINE_LINUX_DEFAULT为以下值

GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt pcie_port_pm=off"

更新grub并重启

update-grub
reboot

PVE 核显直通

nano /etc/default/grub

修改GRUB_CMDLINE_LINUX_DEFAULT增加以下参数

video=efifb:off

修改

nano /etc/modules

添加

vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd

用以下命令查看PCI设备ID并记下来

lspci -nn

可以看到核显ID为8086:3185

00:02.0 VGA compatible controller [0300]: Intel Corporation GeminiLake [UHD Graphics 600] [8086:3185] (rev 06)

添加到vfio的配置中

nano /etc/modprobe.d/vfio.conf

添加

options vfio-pci ids=8086:3185

修改

nano /etc/modprobe.d/blacklist.conf

添加

blacklist snd_hda_intel
blacklist snd_hda_codec_hdmi
blacklist i915

更新引导

update-initramfs -u
update-grub

PVE 硬盘直通

查询硬盘列表

ls -l /dev/disk/by-id/

直通

qm set <虚拟机ID> -<sata|scsi|ide><序号> <硬盘设备路径>

PVE 删除local-lvm分区

lvremove pve/data
lvextend -l +100%FREE -r pve/root

然后在网页管理端,数据中心 - 存储 中删除local-lvm

解决python安装ta-lib报错的问题

问题

Failed to build ta-lib
ERROR: Could not build wheels for ta-lib, which is required to install pyproject.toml-based projects

原因

通过pip安装python的ta-lib包需要调用Visual Studio编译ta-lib库,若没有安装visual studio或者ta-lib库就会编译失败

解决办法

由于安装ta-lib库和visual studio太过麻烦,
https://www.lfd.uci.edu/~gohlke/pythonlibs/#ta-lib
提供了预编译的python包,
下载对应版本以后,使用pip安装即可,注意把TA_Lib‑0.4.24‑cpXXX‑cpXXX‑XXX.whl替换为实际的文件名

pip install TA_Lib‑0.4.24‑cpXXX‑cpXXX‑XXX.whl