MoreRSS

site iconDusays | 杜朋修改

曾任某集团酒店高级网络工程师、某大型 IT 教育网站技术运营总监。
请复制 RSS 到你的阅读器,或快速订阅到 :

Inoreader Feedly Follow Feedbin Local Reader

Dusays | 杜朋的 RSS 预览

OpenResty 的性能优化配置建议

2025-03-25 00:00:00

1Panel 的用户越来越多,内置 Web 服务 OpenResty 使用占比也在增加,但网上对其优化的教程很少。应关关童靴的需求,更新一篇有关 OpenResty 的一些优化建议。可优化设置项较少,需要的小伙伴可以根据实际需求变更配置。

server_names_hash_bucket_size 参数项

含义:该参数用于设置服务器名字 hash 表大小,若名字过长或服务较多,保持默认值可能使 hash 表空间不足,引发错误。

优化建议:一般为 server_names_hash_max_size 的 1/2-1/3 左右,如服务器配置较高,可直接设置 256

gzip 参数项

gzip_min_length 参数项:对小文件压缩可能得不偿失,一般设置为 1k10k 左右,小于该值的文件不压缩。

gzip_comp_level 参数项:压缩级别,1 为最小最快,9 为最大最慢,通常建议设置为 4-6,以平衡压缩效果和 CPU 使用率。

client_header_buffer_size 参数项

含义:用于设置读取客户端请求头的缓冲区大小,若请求头过大,可能超出默认值导致客户端报错。

优化建议:根据实际业务需求调整,如业务请求头通常较大,可设为 32k 左右,确保可以完整读取大部分请求头。

client_max_body_size 参数项

含义:限制客户端请求主体的最大允许大小,超出该值请求将被拒绝。

优化建议:根据业务场景和服务器承受能力设置,如普通表单提交可设置为 10m-20m 左右,对于文件上传等大请求可以适当增大。

keepalive_timeout 参数项

含义:设置长连接的超时时间,即客户端与服务器间连接保持空闲的最大时间。

优化建议:一般设为 60-90 秒左右,时间过短会频繁断开连接且增加开销,过长则可能占用过多的资源。

优化后的配置示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
http {
# gzip相关配置
gzip on;
gzip_min_length 1k;
gzip_comp_level 6;
gzip_buffers 4 16k;
gzip_http_version 1.1;
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php application/json;
gzip_vary on;
gzip_proxied any;
gzip_disable "msie6";

# 服务器名字hash表大小
server_names_hash_bucket_size 128;

# 客户端请求头缓冲区大小
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;

# 客户端请求主体最大允许大小
client_max_body_size 32m;

# 长连接超时时间
keepalive_timeout 60;

# 其他配置...
}

注意:以上配置仅供参考,具体优化需根据实际业务场景和硬件配置进行调优。

Nginx 从配置到缓存的性能优化

2025-03-22 00:00:00

Nginx 是一个高性能的 HTTP 服务器和反向代理服务器,广泛应用于处理高并发请求。然而,默认配置并不一定适合所有场景,尤其是在高流量或复杂业务逻辑的情况下。本文将介绍一些 Nginx 的基础配置优化和缓存的使用方法以提升 Nginx 的性能。

基础配置优化

  1. 调整 worker_processes 以及 worker_connections

Nginx 使用多进程模型处理请求。worker_processes 定义 Nginx 使用的工作进程数,而 worker_connections 定义每个工作进程可以处理的最大连接数:

1
2
3
4
worker_processes auto;
events {
worker_connections 1024;
}

参数作用如下:

参数 作用
worker_processes 设置为 auto 可以让 Nginx 自动根据 CPU 核心数来分配工作进程数。如服务器有 4 个 CPU 核心,Nginx 会启动 4 个工作进程。
worker_connections 这个值决定了每个工作进程可以处理的最大连接数。通常,可根据服务器的内存和网络带宽来调整这个值。1024 是一个常见起点,可以调整到 2048。
  1. 启用 keepalive 长连接

HTTP 协议中的 keepalive 机制允许客户端和服务器在同一个连接上发送多个请求,减少了 TCP 连接的建立和关闭开销:

1
2
3
4
http {
keepalive_timeout 65;
keepalive_requests 100;
}

参数作用如下:

参数 作用
keepalive_timeout 定义客户端与服务器保持连接的时间。设置为 65 秒意味着如果客户端在 65 秒内没有发送新请求,连接将被关闭。
keepalive_requests 定义了单个连接上允许的最大请求数。设置为 100 意味着一个连接可以处理 100 个请求后关闭。
  1. 调整 buffer 的大小

Nginx 使用缓冲区来存储请求和响应数据。如缓冲区设置过小,Nginx 可能会频繁地进行磁盘 I/O 操作,影响性能:

1
2
3
4
5
http {
client_body_buffer_size 10K;
client_header_buffer_size 1k;
large_client_header_buffers 48k;
}

参数作用如下:

参数 作用
client_body_buffer_size 定义用于存储客户端请求体的缓冲区大小。如请求体超过这个大小,会将数据写入磁盘。
client_header_buffer_size 定义用于存储客户端请求头的缓冲区大小。
large_client_header_buffers 定义用于存储大型请求头的缓冲区数量和大小。

缓存提升性能

  1. 启动静态资源缓存

对于静态资源,启用缓存可以显著减少服务器的负载:

1
2
3
4
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 30d;
add_header Cache-Control "public, no-transform";
}

参数作用如下:

参数 作用
expires 定义了资源的缓存时间。30d 表示资源将缓存 30 天。
Cache-Control public 表示资源可以被任何缓存「如浏览器、CDN等」缓存,no-transform 表示不允许代理服务器对资源进行转换「如压缩等」
  1. 使用代理缓存

如使用 Nginx 作为反向代理,可启用代理缓存来缓存后端服务器的响应:

1
2
3
4
5
6
7
8
9
10
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;

server {
location / {
proxy_cache my_cache;
proxy_pass http://backend;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
}
}

参数作用如下:

参数 作用
proxy_cache_path 定义了缓存存储的路径、缓存键的存储区域、缓存的最大大小及缓存的有效期。
proxy_cache 启用缓存并使用指定的缓存区域。
proxy_cache_valid 定义不同状态码的缓存时间。
  1. 使用 gzip 压缩减少网络传输量

gzip 压缩可以显著减少传输数据量,从而加快页面加载速度:

1
2
3
4
5
6
7
8
http {
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
gzip_comp_level 6;
gzip_min_length 256;
gzip_proxied any;
gzip_vary on;
}

参数作用如下:

参数 作用
gzip 启用压缩。
gzip_types 定义了需要压缩的文件类型。通常包括文本文件、CSS/JavaScript/XML 等。
gzip_comp_level 定义压缩级别,范围是 1 到 9。1 是最低的压缩率,9 是最高的压缩率。默认值 6
gzip_min_length 定义最小压缩文件大小。小于这个大小的文件不会被压缩。
gzip_proxied 定义了是否对代理请求启用压缩。any 表示对所有代理请求启用压缩。
gzip_vary 添加响应,确保代理服务器能正确处理缓存。

HTTP/2 与速率限制

  1. 使用 HTTP/2 版协议

HTTP/2 提供了多路复用、头部压缩特性,可以显著提升性能:

1
2
3
4
5
server {
listen 443 ssl http2;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
}

参数作用如下:

参数 作用
http2 listen 指令中添加 http2 参数即可启用。
  1. 限制请求速率

为了防止恶意请求或突发流量导致服务器过载,可使用 limit_req 模块限制请求速率:

1
2
3
4
5
6
7
8
9
http {
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;

server {
location / {
limit_req zone=one burst=5;
}
}
}

参数作用如下:

参数 作用
limit_req_zone 定义限流区域。$binary_remote_addr 表示根据客户端的 IP 地址进行限流,rate=1r/s 表每秒允许 1 个请求。
limit_req 在指定的位置应用限流。burst=5 表允许突发 5 个请求。

LB 和日志优化

  1. 负载均衡
1
2
3
4
5
6
7
8
9
10
upstream backend {
server 192.168.1.1:8080;
server 192.168.1.2:8080;
}

server {
location / {
proxy_pass http://backend;
}
}

注意:通过 upstream 模块可以将请求分发到多个后端服务器,提高并发处理能力。

  1. 日志优化
1
2
access_log /var/log/nginx/access.log main buffer=16k;
error_log /var/log/nginx/error.log warn;

注意:调整日志级别可减少日志输出量,提升性能。这表示将访问日志的缓冲区大小设置为 16KB,并将错误日志级别设置为 warn

1Panel 全新移动 APP 上线

2025-03-19 00:00:00

1Panel 作为新一代的服务器管理面板,为 Linux 服务器运维提供了一个舒适便捷的 Web 图形界面。为了方便移动办公,1Panel 推出了 APP 移动端,目前还在测试阶段,不过足以满足大多数用户的需求。

功能满足多样需求

1Panel APP 拥有丰富且实用功能特性,涵盖服务器管理的多个重要方面。它支持 Android 和 iOS 系统,确保不同设备用户都能享受到一致的服务体验。用户可以方便地添加多个 1Panel 服务,实现对多台服务器集中管理:

首页全局概览表盘,以直观的方式展示服务器的关键信息,让用户一眼就能了解服务器整体运行状况:

应用管理方面,1Panel APP 表现得十分出色。用户不仅能够查看已安装的应用,还能轻松进行安装、配置、管理操作,极大地简化了应用部署和维护的流程:

对于网站管理,它提供专业的工具,方便用户对网站进行创建和编辑、删除操作,同时支持域名绑定和 SSL 证书配置,确保网站的安全性和稳定性:

Docker 容器管理是 1Panel APP 的一大亮点。用户可以方便创建、启动、停止、删除容器,还可以对容器的资源进行合理分配和监控,满足了开发者和运维人员在容器化部署方面的需求:

服务器状态监控功能则让用户实时掌握 CPU、内存、磁盘等资源的使用情况,及时发现潜在性能瓶颈,为服务器优化提供有力依据:

获取使用资格方式

目前 1Panel APP 正式版仅支持专业版用户使用,可以通过各大厂家应用商店安装手机端 APP。

如果还不是 1Panel 专业版用户,又感觉官方的价格太贵,欢迎选择《1Panel 专业版低价租用》数量有限,先到先得!

解释器权限不够的处理思路

2025-03-16 00:00:00

当我们在使用 Linux 系统进行开发或者运维工作时,经常遇到一些错误提示。其中一个常见错误是解释器权限不够。这个错误提示表明在运行 targetcli 命令,系统没有足够权限来执行所需的 Python 解释器。在本文中,我们将探讨这个错误原因和解决方法。

错误原因

为理解这个错误的原因,我们需要先了解下 Linux 系统的权限管理机制。

Linux 系统将用户和组织分为不同的分类,并为每个用户和组织分配不同的权限。这些权限决定用户可以访问和执行哪些文件和目录。

在这个特定错误中,我们看到了一个错误路径/usr/bin/targetcli 和错误消息/usr/bin/python3:解释器错误:权限不够

系统无法在路径/usr/bin/targetcli 下找到所需的 Python 解释器,且没有足够的权限来执行它。

解决方法

  1. 确定缺少的解释器

首先,我们需确定缺少的 Python 解释器。

在错误消息中,我们看到了/usr/bin/targetcli/usr/bin/python3 两个路径。这告诉我们 targetcli 命令需要 python3 来执行。

  1. 确定解释器的位置

接下来我们需要确定 python3 解释器的实际位置。我们可以使用 which 命令来找到解释器的路径。

可在终端中运行命令 which python3。命令的输出将告诉我们 python3 解释器位置。比如,输出可能是/usr/local/bin/python3

  1. 修改 python3 解释器路径

一旦我们找到了 python3 解释器的位置,我们可以通过修改 targetcli 脚本来更新解释器的路径。

打开终端并输入命令 sudo vi /usr/bin/targetcli。这将使用编辑器打开 targetcli 脚本。

在脚本中,我们需要查找#!/usr/bin/python3 这一行,并将其替换为 python3 解释器实际路径。

在这个例子中,我们可以将其替换为#!/usr/bin/python3

  1. 更改脚本权限

最后,我们需要为 targetcli 脚本提供执行权限。

可在终端中运行命令 sudo chmod +x /usr/bin/targetcli。如果一切顺利,我们应该不再看到错误消息。

dynv6 免费二级域名申请及管理

2025-03-13 00:00:00

自飞牛 OS 支持虚拟机后,很多使用飞牛的小伙伴会询问杜老师有关 DDNS 的问题。希望可以白嫖一个二级域名,支持 API 变更解析值,且支持 IPv6 解析。恰好杜老师发现了一个网站,支持多后缀的二级域名白嫖,这里分享给需要的小伙伴们!

什么是 dynv6

dynv6 是一款免费的动态 DNS 服务,其专为 IPv6 设计。

它允许用户将公共主机名轻松分配给私有主机,从而实现对私有主机的远程访问。

dynv6 对所有用户免费开放。可以选择一个免费的主机名开始使用,或者将自己的域名委托给 dynv6。

然而,需要注意的是,dynv6 目前并不提供企业级的 DDoS 防护和 SLA。因此,dynv6 适合用于非关键服务。

强大的 API 支持

dynv6 提供多种方式来更新区域,满足不同用户需求。

其中包括 REST API 和 SSH 以及 DNS 更新。这些 API 的存在,使得 dynv6 的使用更加灵活、方便。

无论是开发者还是普通用户,都可以根据自己的需求选择合适的 API 来更新 DNS 记录。

此外,dynv6 支持 Webhooks 功能。当 IP 地址发生变化时 Webhooks 可以用来更新外部服务。

官网地址

dynv6 的官网地址如下:

使用截图

打开上面的官网后,点击右上角 Sign up 进行账号注册:

完成账号登录后会自动登录,也可通过右上角 Sign in 进行登录。点击 Create new Zone 可白嫖免费二级域名:

点击下拉框后,可以看到有多个后缀可选择,同时填写 IPv4 或者 IPv6 地址:

若想托管顶级域名,可以点击导航栏 My Domains:

使用 Docker 部署 tinyMediaManager 刮削工具

2025-03-10 00:00:00

杜老师使用 Emby 管理媒体文件,但刮削时经常报错。tinyMediaManager 是款功能强大的开源媒体管理工具,能够帮助轻松整理和管理媒体库。本文将详细介绍 tinyMediaManager 的搭建过程和基本使用方法。

什么是 tinyMediaManager

tinyMediaManager 简称 TMM 是一款用 Java/Swing 编写的媒体管理工具,能够为 Jellyfin、Emby 等媒体服务器提供元数据。

通过 TMM 可以抓取和整理影片详细信息、封面图像、演员列表、导演信息等元数据,让媒体库更加丰富、完整。

搭建准备

准备好想要管理的电影、电视剧等媒体文件,并将其存放在一个固定的目录中,方便 TMM 进行扫描和管理。

我们假设电影文件放入</path/to/movies>目录中,命令可参考 mkdir </path/to/movies>

电视文件放入</path/to/tv_shows/>目录中,命令可参考 mkdir </path/to/tv_shows/>

新建数据文件夹</path/to/local/data/>,命令可参考 mkdir </path/to/local/data/>

部署安装

这里我们使用 Docker 来部署,docker-compose.yml 的参考内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
---
version: "2.1"
services:
tinymediamanager:
image: tinymediamanager/tinymediamanager:latest
container_name: tinymediamanager
environment:
- USER_ID=1000
- GROUP_ID=100
- ALLOW_DIRECT_VNC=true
- LC_ALL=en_US.UTF-8 # force UTF8
- LANG=en_US.UTF-8 # force UTF8
- PASSWORD=<password>
- TZ=Asia/Shanghai
volumes:
- </path/to/local/data/>:/data
- </path/to/movies>:/media/movies
- </path/to/tv_shows/>:/media/tv_shows
ports:
- 5900:5900 # VNC port
- 4000:4000 # Webinterface
restart: unless-stopped

将上方代码中<password>改为 TMM 访问密码,配置好后执行如下命令即可:

1
docker-compose up -d

基本使用

第一次启动时,会进入 TMM 设置向导。需要选择媒体类型、设置媒体目录路径、选择元数据来源等。按照向导提示逐步完成设置即可:

设置完成后 TMM 会自动扫描指定的媒体目录,识别其中媒体文件,并尝试从在线数据库中获取相应的元数据:

TMM 会根据文件标题到电影资料网站上匹配电影信息,下载电影资料及图片到本地。可以查看和编辑这些元数据,确保信息的准确性和完整性:

TMM 还可按照一定的规则批量重命名和整理媒体文件,使文件名称更加规范和统一,方便管理、查找: