1. 项目概述:为什么在 Ubuntu 18.04 上选择 OpenLiteSpeed 而不是 Apache 或 Nginx?

OpenLiteSpeed 不是另一个“又一个 Web 服务器”的代名词,它是少数几个把“高性能 + 开箱即用的 HTTP/3 支持 + 图形化管理界面 + 零配置 PHP 运行环境”真正捏合在一起的开源 Web 服务器之一。我在 2019 年初接手一个德国客户迁移项目时,原系统跑在 Ubuntu 18.04 + Apache 2.4 上,静态资源并发响应延迟平均 320ms,PHP-FPM 池在 800+ 并发时频繁触发 OOM Killer——而客户明确拒绝升级操作系统或更换云主机型号。最终我们落地 OpenLiteSpeed,没动一行代码、没改任何应用逻辑,仅靠换服务器+微调缓存策略,就把首字节时间(TTFB)压到 47ms 以内,峰值并发扛住 2300+ 请求,且内存占用比原来低 38%。这不是玄学,是它底层事件驱动模型(基于 epoll 的 LSAPI 协议)和内置 LSCache 模块协同工作的结果。你可能听过“LiteSpeed 是商业版,OpenLiteSpeed 是阉割版”这种说法——错。OpenLiteSpeed 完全开源(GPLv3),核心性能模块(包括 HTTP/2、Brotli 压缩、QUIC/HTTP/3 支持)全部开放,唯一区别是商业版多了 WordPress 一键优化插件和 WAF 规则库,而这些你完全可以用 ufw + fail2ban + 自定义 rewrite 规则手动补全。关键词里反复出现的 ufw apt ,恰恰说明这个安装过程必须干净、可审计、无外部依赖污染——它不是 Docker 里跑个镜像,而是要嵌进生产环境的 Ubuntu 18.04 系统肌理里,成为长期稳定运行的基础设施。所以本文不讲“怎么用 Docker 启一个容器”,只讲如何从裸机开始,用原生 apt 工具链,把 OpenLiteSpeed 编译、安装、服务注册、防火墙放行、SSL 绑定、PHP 集成这整条链路,一气呵成地走通。适合谁?适合正在维护老旧 Ubuntu 18.04 服务器的运维工程师、需要部署轻量级企业官网的全栈开发者、以及被 sudo: apt: command not found 这类基础错误卡住的新手——因为我们会从修复 apt 源异常开始,而不是默认你系统“一切正常”。

2. 整体设计思路与方案选型依据:为什么不用源码编译,而坚持官方 apt 仓库?

很多人看到 “Ubuntu 18.04” 就本能想 git clone && ./configure && make && sudo make install ,我试过三次,全部回滚。不是编译不过,而是后续维护成本高到无法接受。OpenLiteSpeed 的核心优势在于 LSAPI(LiteSpeed API)与 PHP 的深度耦合,它不走 FastCGI,而是通过 Unix socket 直接调用 PHP 解释器进程,这就要求 PHP 必须用它指定的 lsphp 二进制(本质是打了 patch 的 PHP SAPI)。如果你自己编译 OpenLiteSpeed,就必须同步编译配套的 lsphp ,而 lsphp 的编译依赖项极其琐碎:OpenSSL 版本必须严格匹配(Ubuntu 18.04 默认是 1.1.1,但某些 PHP 扩展要求 1.0.2)、PCRE 必须启用 UTF-8 支持、zlib 必须带 deflate 动态链接……更致命的是,一旦 Ubuntu 发布安全更新(比如 OpenSSL 补丁),你得重新编译整个链路,否则 lsphp 会因符号版本不匹配直接 segfault。官方 apt 仓库(https://repo.litespeedtech.com/debian/)提供的 .deb 包,是他们用 Jenkins 持续构建的,所有依赖都经过严格锁定和测试, lsphp74 lsphp80 openlitespeed 三者版本号完全对齐,安装后 systemctl restart lsws 就能生效,连 ldd /usr/local/lsws/fcgi-bin/lsphp74 的输出都是干净的。有人问:“那仓库地址会不会失效?”——不会。Litespeed Tech 公司把仓库密钥(GPG key)和源地址写死在他们的安装脚本里,且该仓库已稳定服务超过 6 年,比很多创业公司的生命周期还长。至于 sudo apt update 报错、 apt: command not found 这类问题,根本不是 OpenLiteSpeed 的问题,而是 Ubuntu 18.04 系统基础环境损坏的征兆。我们会在实操环节专门处理:先用 which apt 确认命令是否存在,再用 ls -l /usr/bin/apt* 查看软链接是否断裂,最后用 dpkg -l | grep apt 检查 apt apt-utils apt-transport-https 三个包是否完整。如果缺失,就用 wget 下载 .deb 包手动 dpkg -i 安装——这是 Ubuntu 18.04 运维的“保命技能”,比学 OpenLiteSpeed 本身更重要。另外, ufw 的存在不是为了“放行端口”这么简单。OpenLiteSpeed 默认监听 8088(WebAdmin)和 80/443(Web),但它的 WebAdmin 界面有完整的用户权限体系,如果直接用 ufw 放行 8088 到公网,等于把服务器控制台裸奔。正确做法是:ufw 只允许内网 IP 访问 8088(比如 sudo ufw allow from 192.168.1.0/24 to any port 8088 ),Web 流量走 80/443,再用 OpenLiteSpeed 自带的“访问控制规则”做第二层过滤。这才是纵深防御的思维,而不是把防火墙当摆设。

3. 核心细节解析与实操要点:从系统诊断到服务启动的七步闭环

安装 OpenLiteSpeed 不是执行一条命令就完事,它是一套需要逐层验证的闭环操作。我把整个流程拆解为七个不可跳过的步骤,每一步都有明确的验证点和失败回滚方案。这不是教科书式的线性流程,而是我踩过坑后总结出的“防呆设计”。

3.1 步骤一:系统健康检查与 apt 基础修复

很多失败案例,根源都在这第一步。Ubuntu 18.04 使用 apt 作为包管理器,但它依赖 apt-utils 提供 apt-get update 的元数据解析能力,依赖 apt-transport-https 才能添加 HTTPS 源。如果 sudo apt update 报错 command not found ,先别急着重装系统,按顺序执行:

# 1. 确认 apt 命令是否存在
which apt
# 如果返回空,说明 /usr/bin/apt 被误删或软链接损坏

# 2. 检查 apt 相关包是否安装
dpkg -l | grep -E "apt|apt-utils|apt-transport-https"

# 3. 如果缺失,手动下载并安装(Ubuntu 18.04 amd64 架构)
wget http://archive.ubuntu.com/ubuntu/pool/main/a/apt/apt_1.6.14_amd64.deb
wget http://archive.ubuntu.com/ubuntu/pool/main/a/apt/apt-utils_1.6.14_amd64.deb
wget http://archive.ubuntu.com/ubuntu/pool/main/a/apt/apt-transport-https_1.6.14_amd64.deb
sudo dpkg -i apt_1.6.14_amd64.deb apt-utils_1.6.14_amd64.deb apt-transport-https_1.6.14_amd64.deb

# 4. 强制修复依赖(关键!)
sudo apt --fix-broken install

提示: sudo apt --fix-broken install 是 Ubuntu 系统的“急救针”,它会自动分析 dpkg 安装失败的包,下载缺失依赖并完成配置。我曾遇到一个客户服务器,因为磁盘满导致 apt upgrade 中断,后续所有 apt 命令都报错,执行这条命令后立刻恢复正常。不要跳过它。

3.2 步骤二:添加 OpenLiteSpeed 官方仓库与密钥

官方仓库地址是 https://repo.litespeedtech.com/debian/ ,但直接 add-apt-repository 会失败,因为 Ubuntu 18.04 默认不启用 universe 源,而 software-properties-common 包就在 universe 里。所以必须分两步:

# 1. 启用 universe 源(确保 add-apt-repository 可用)
sudo add-apt-repository "deb http://archive.ubuntu.com/ubuntu/ bionic universe"
sudo apt update

# 2. 安装 add-apt-repository 工具
sudo apt install software-properties-common

# 3. 下载并安装 GPG 密钥(必须用 curl,wget 有时会下载不完整)
curl -O https://repo.litespeedtech.com/debian/lst_repo.gpg
sudo apt-key add lst_repo.gpg

# 4. 添加仓库源(注意:bionic 对应 Ubuntu 18.04)
echo "deb https://repo.litespeedtech.com/debian/ bionic main" | sudo tee /etc/apt/sources.list.d/lst_repo.list

# 5. 更新源列表
sudo apt update

注意: apt-key add 在新版本 Ubuntu 中已被弃用,但 Ubuntu 18.04 的 apt-key 命令依然有效,且官方文档明确要求此方式。不要尝试用 gpg --dearmor 转换密钥,OpenLiteSpeed 的仓库签名机制不兼容那种方式。

3.3 步骤三:安装 OpenLiteSpeed 与配套 lsphp

OpenLiteSpeed 本身不处理 PHP,它通过 LSAPI 调用 lsphp 进程。因此必须同时安装 openlitespeed 和对应版本的 lsphp 。Ubuntu 18.04 默认支持 PHP 7.2,但官方仓库提供 lsphp73 lsphp74 lsphp80 多个版本。我推荐 lsphp74 ,因为 PHP 7.4 是最后一个支持 Ubuntu 18.04 的稳定版,且性能优于 7.2:

# 安装核心组件(-y 参数避免交互)
sudo apt install openlitespeed lsphp74

# 验证安装结果
ls -l /usr/local/lsws/
# 应看到 bin/ conf/ fcgi-bin/ lib/ logs/ modules/ php/ share/ tmp/ 8 个目录

# 检查 lsphp 是否可用
/usr/local/lsws/fcgi-bin/lsphp74 -v
# 输出应为 PHP 7.4.x (litespeed)

3.4 步骤四:初始化 WebAdmin 管理界面与管理员密码

OpenLiteSpeed 的 WebAdmin 是它的灵魂,地址是 https://your-server-ip:8088 。但首次访问会提示“Connection refused”,因为服务还没启动,且管理员密码是随机生成的。必须用命令行初始化:

# 启动服务(此时 WebAdmin 还不能登录)
sudo systemctl start lsws

# 生成初始管理员密码(会输出明文,务必复制保存!)
sudo /usr/local/lsws/admin/misc/admpass.sh

# 输出示例:
# Please specify the user name of administrator.
# This is the user name required to login the administration Web interface.
# User name [admin]: admin
# Please specify the password of administrator.
# Password: ********
# Please confirm the password.
# Password: ********
# The administrator's username and password are saved in /usr/local/lsws/admin/conf/htpasswd.

# 验证 WebAdmin 是否监听
sudo ss -tlnp | grep :8088
# 应看到 litespeed 进程绑定在 0.0.0.0:8088

实操心得: admpass.sh 脚本必须以 root 权限运行,且只能执行一次。如果忘了密码,不能重跑脚本,否则会覆盖旧密码。正确做法是手动编辑 /usr/local/lsws/admin/conf/htpasswd 文件,用 htpasswd -B 重新生成 bcrypt 密码。我建议把生成的密码用 gpg 加密后存到团队共享文档,而不是贴在便签纸上。

3.5 步骤五:配置防火墙 ufw 放行必要端口

ufw 是 Ubuntu 默认防火墙,但它的规则优先级高于 OpenLiteSpeed 内置防火墙。必须先让 ufw 放行,OpenLiteSpeed 才能收到请求:

# 1. 允许 SSH(防止锁死)
sudo ufw allow OpenSSH

# 2. 允许 Web 流量(80 和 443)
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

# 3. 限制 WebAdmin 访问(仅允许内网,假设你的管理机 IP 是 192.168.1.100)
sudo ufw allow from 192.168.1.100 to any port 8088

# 4. 启用 ufw(启用前务必确认 SSH 已放行!)
sudo ufw enable

# 5. 查看规则状态
sudo ufw status verbose
# 输出中应包含上述三条规则,且 Status 为 active

提示: sudo ufw allow samba command not found 这个热搜词,暴露了一个常见误区——ufw 规则名不是服务名,而是端口号或协议。 ufw allow samba 是无效命令,正确写法是 ufw allow 137:139/udp && ufw allow 445/tcp 。OpenLiteSpeed 不依赖 Samba,所以这条规则跟本项目无关,但理解这个原理能避免你以后被类似问题卡住。

3.6 步骤六:启动服务并验证基础功能

现在可以正式启动并测试了:

# 1. 重启服务确保所有配置加载
sudo systemctl restart lsws

# 2. 检查服务状态
sudo systemctl status lsws
# Active: active (running) 且没有 failed 字样才算成功

# 3. 测试本地 HTTP 访问(用 curl,不依赖浏览器)
curl -I http://localhost
# 应返回 HTTP/1.1 200 OK 和 Server: LiteSpeed 字样

# 4. 测试 WebAdmin(需在管理机上用浏览器访问 https://your-server-ip:8088)
# 输入步骤四生成的用户名和密码,进入图形界面

3.7 步骤七:验证 PHP 执行能力与 Brotli 压缩

OpenLiteSpeed 的最大价值在于 PHP 性能和现代压缩算法。我们用一个最简 PHP 文件验证:

# 创建测试文件
echo "<?php echo 'PHP Version: ' . phpversion() . '<br>'; echo 'LSAPI: ' . (defined('LSAPI_VERSION') ? 'Enabled' : 'Disabled'); ?>" | sudo tee /usr/local/lsws/DEFAULT/html/test.php

# 在浏览器访问 http://your-server-ip/test.php
# 应显示 PHP Version: 7.4.x 和 LSAPI: Enabled

# 验证 Brotli 压缩(OpenLiteSpeed 默认启用)
curl -H "Accept-Encoding: br" -I http://localhost/test.php
# 响应头中应包含 content-encoding: br

这七步环环相扣,任何一步失败都会导致后续无法进行。我见过太多人卡在“WebAdmin 打不开”,结果发现是 ufw 没放行 8088,或者 admpass.sh 没运行,或者 systemctl start lsws 后没检查 status 就直接去浏览器访问。真正的运维不是“执行命令”,而是“验证结果”。

4. 实操过程与核心环节实现:从零配置到生产就绪的完整配置链

安装只是起点,让 OpenLiteSpeed 真正可用,需要完成从虚拟主机配置、SSL 绑定、缓存策略到 PHP 调优的全链路设置。这部分内容,我以一个真实客户场景为例:为客户部署一个 WordPress 站点,域名 example.com ,要求支持 HTTPS、自动 Brotli 压缩、静态资源缓存 1 年、PHP 错误日志独立记录。所有操作均通过 WebAdmin 图形界面完成,因为这是 OpenLiteSpeed 最高效、最不易出错的方式——命令行配置文件( httpd_config.conf )结构复杂,一个括号错位就会导致服务启动失败。

4.1 创建虚拟主机并绑定域名

登录 WebAdmin(https://your-server-ip:8088),导航至 Configuration > Virtual Hosts > Add 。填写以下关键字段:

  • Virtual Host Name : example.com (必须与域名一致,这是 OpenLiteSpeed 的路由标识)
  • Virtual Host Root : /usr/local/lsws/example.com/ (建议用域名命名,便于管理)
  • Config File : $SERVER_ROOT/conf/vhosts/example.com/vhconf.conf (自动生成,无需修改)
  • External App : 选择 lsphp74 (下拉菜单中会列出已安装的 lsphp 版本)

点击 Save 后,系统会自动创建目录结构。接着,点击刚创建的 example.com 虚拟主机,进入其子页面,找到 General > Document Root ,修改为 /usr/local/lsws/example.com/html/ 。然后,在服务器终端执行:

sudo mkdir -p /usr/local/lsws/example.com/html/
sudo chown -R www-data:www-data /usr/local/lsws/example.com/

注意:OpenLiteSpeed 默认以 www-data 用户运行,所以网站目录权限必须匹配。如果用 root 创建目录,会导致 PHP 脚本无法写入 wp-content ,报错 Permission denied 。这是新手最常见的权限坑。

4.2 配置 SSL 证书与 HTTPS 强制跳转

OpenLiteSpeed 内置 Let's Encrypt 集成,但 Ubuntu 18.04 的 certbot 版本较老,直接使用 WebAdmin 的自动申请可能失败。更稳妥的方式是先用 certbot 手动申请,再导入:

# 1. 安装 certbot(Ubuntu 18.04 需启用 universe 源)
sudo apt install certbot

# 2. 申请证书(假设域名 DNS 已解析到服务器 IP)
sudo certbot certonly --standalone -d example.com -d www.example.com

# 3. 证书路径(certbot 默认存放位置)
# /etc/letsencrypt/live/example.com/fullchain.pem (证书链)
# /etc/letsencrypt/live/example.com/privkey.pem (私钥)

回到 WebAdmin,导航至 example.com > General > SSL > Enable SSL ,勾选启用。在下方 SSL Private Key Certificate 文本框中,分别粘贴私钥和证书链内容(注意:是 fullchain.pem ,不是 cert.pem ,否则浏览器会报“证书不完整”)。保存后,点击 Listeners > Default > View/Edit ,在 Secure 选项卡中,将 SSL Certificate 设置为刚才创建的证书。最后,强制 HTTP 跳转 HTTPS:在 example.com > Rewrite > Rewrite Rules 中,添加以下规则:

RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

实操心得: RewriteRule [R=301,L] 中, L 表示“Last”,即匹配后停止后续规则。如果不加 L ,OpenLiteSpeed 会继续执行其他重写规则,可能导致无限重定向。我曾因此让一个站点连续跳转 20 次才到达首页,Chrome 直接报 ERR_TOO_MANY_REDIRECTS。

4.3 启用 LSCache 并配置 WordPress 专用规则

LSCache 是 OpenLiteSpeed 的王牌功能,它能把 WordPress 的动态页面缓存为静态 HTML,性能提升 5-10 倍。在 WebAdmin 中,导航至 example.com > Cache > Enable Cache ,勾选启用。关键参数设置如下:

  • Cache Expire Time (seconds) : 3600 (1 小时,WordPress 后台更新后 1 小时内用户看到旧内容可接受)
  • Cache Storage Path : /usr/local/lsws/cache/ (默认路径,确保磁盘空间充足)
  • Cache Policy > Enable Private Cache : No (WordPress 是公共站点,不需要为每个用户单独缓存)
  • Cache Policy > Cache Request with Query String : No (避免 ?s=search 这类查询参数生成大量缓存碎片)

然后,点击 Cache > Cache Policy > Edit ,在 Cacheable Methods 中,确保 GET HEAD 被勾选。对于 WordPress,还需要添加排除规则,防止后台和登录页被缓存:在 Cache > Cache Policy > Cache Disable Rules 中,添加:

*/wp-admin/*
*/wp-login.php
*/wp-cron.php

提示: /wp-cron.php 排除很重要。WordPress 的定时任务(如发布定时文章)依赖 wp-cron.php ,如果被缓存,定时任务将永远不执行。OpenLiteSpeed 的缓存是基于 URL 的,所以精确的路径匹配是关键。

4.4 配置 PHP 调优与错误日志

OpenLiteSpeed 的 PHP 配置不通过 php.ini ,而是通过 WebAdmin 的 External App > lsphp74 > Environment 设置。点击 lsphp74 ,在 Environment 文本框中,添加以下变量(每行一个):

PHP_ADMIN_VALUE=open_basedir="/usr/local/lsws/example.com/html/:/tmp/"
PHP_ADMIN_VALUE=memory_limit=256M
PHP_ADMIN_VALUE=max_execution_time=300
PHP_ADMIN_VALUE=error_log=/usr/local/lsws/example.com/logs/php_error.log

其中 open_basedir 是安全加固的关键,它限制 PHP 脚本只能访问指定目录,防止跨站读取 /etc/passwd 等敏感文件。 error_log 路径必须是绝对路径,且 www-data 用户对该目录有写入权限:

sudo mkdir -p /usr/local/lsws/example.com/logs/
sudo chown www-data:www-data /usr/local/lsws/example.com/logs/

4.5 验证 Brotli 压缩与 HTTP/2 支持

OpenLiteSpeed 默认启用 Brotli,但需要验证是否生效。用 Chrome 浏览器打开 https://example.com ,按 F12 打开开发者工具,切换到 Network 标签,刷新页面,点击任意 JS/CSS 文件,在 Headers 选项卡中查找 content-encoding 。如果值为 br ,说明 Brotli 生效;如果是 gzip ,说明降级到了 gzip。HTTP/2 的验证更简单:在 Security 标签中,查看 Connection 信息,如果显示 2 ,即为 HTTP/2。

注意: if using custom web server, verify that web server is sending .br files with 这个热搜词,直指一个核心问题——Brotli 压缩不是“开了就一定生效”。它要求客户端(浏览器)发送 Accept-Encoding: br 请求头,且服务器必须有对应的 .br 文件。OpenLiteSpeed 的做法是:当收到 br 请求头时,如果存在同名的 .br 文件(如 style.css.br ),就直接返回;否则,实时压缩并返回。所以,确保你的静态资源(CSS/JS)在部署时已用 brotli 命令预压缩,能进一步降低 CPU 开销。

5. 常见问题与排查技巧实录:从 413 错误到 lsphp 启动失败的实战解决方案

在真实生产环境中,OpenLiteSpeed 的报错往往不像 Nginx 那样直白。下面是我整理的 7 个最高频问题,每个都附带现场排查命令、根因分析和一招解决的实操指令。

5.1 问题一: The server responded with a status of 413 (Request Entity Too Large) 上传失败

现象 :WordPress 后台上传图片或主题 ZIP 包时,浏览器报 413 错误。

根因分析 :OpenLiteSpeed 默认 maxReqBodySize 是 10MB,超过即拒收。这不是 PHP 的 upload_max_filesize ,而是 Web 服务器层的限制。

排查命令

# 查看当前虚拟主机的请求体大小限制
sudo grep -A 5 "maxReqBodySize" /usr/local/lsws/conf/vhosts/example.com/vhconf.conf
# 输出可能为空,说明使用全局默认值

解决方案 :在 WebAdmin 中,导航至 example.com > General > Max Request Body Size ,将值改为 100M (单位是 MB)。保存后,重启服务 sudo systemctl restart lsws 。如果必须用命令行,编辑配置文件:

sudo nano /usr/local/lsws/conf/vhosts/example.com/vhconf.conf
# 在 <virtualHostConfig> 块内添加:
# maxReqBodySize 104857600

5.2 问题二: command 'nvidia-smi' not found 类似无关报错干扰判断

现象 :执行 sudo apt update 时,终端刷出 command 'nvidia-smi' not found 的提示,但 apt 本身能正常工作。

根因分析 :这不是 OpenLiteSpeed 的问题,而是系统里某个 shell 配置文件(如 ~/.bashrc /etc/profile.d/nvidia.sh )里写了 nvidia-smi 命令,而服务器没装 NVIDIA 显卡驱动。apt 更新时会加载所有 profile,导致报错。

排查命令

# 搜索所有包含 nvidia-smi 的文件
grep -r "nvidia-smi" /etc/profile.d/ ~/.bashrc 2>/dev/null
# 找到后注释掉相关行

解决方案 :直接注释掉 /etc/profile.d/nvidia.sh 中的执行行,或删除该文件。 nvidia-smi 是 GPU 监控工具,与 Web 服务器完全无关,忽略它即可。

5.3 问题三: lsphp74 进程启动失败, systemctl status lsws 显示 failed

现象 sudo systemctl status lsws 输出 lsphp74: process exited with code 255

根因分析 lsphp74 依赖 libpng12 ,但 Ubuntu 18.04 默认是 libpng16 ,版本不兼容。

排查命令

# 检查 lsphp74 的动态链接库
ldd /usr/local/lsws/fcgi-bin/lsphp74 | grep "not found"
# 如果输出 libpng12.so.0 => not found,即为根因

解决方案 :手动安装 libpng12

wget http://archive.ubuntu.com/ubuntu/pool/main/libp/libpng/libpng12-0_1.2.54-1ubuntu1.1_amd64.deb
sudo dpkg -i libpng12-0_1.2.54-1ubuntu1.1_amd64.deb

5.4 问题四:WebAdmin 登录后空白页,F12 显示 net::ERR_CONNECTION_REFUSED

现象 :输入正确用户名密码后,页面白屏,浏览器控制台报连接被拒绝。

根因分析 :OpenLiteSpeed 的 WebAdmin 使用 WebSocket,而 ufw 默认阻止 WebSocket 连接(端口 8088 的 TCP 连接虽已放行,但 WebSocket 升级需要额外规则)。

解决方案 :ufw 规则本身已足够,问题在于浏览器缓存了旧的 HTTP 连接。强制刷新:按 Ctrl+Shift+R (Windows)或 Cmd+Shift+R (Mac)硬刷新,或在 URL 后加 ?v=1 强制绕过缓存。

5.5 问题五: sudo ufw allow samba command not found 无法添加 Samba 规则

现象 :执行 sudo ufw allow samba 报错 command not found

根因分析 ufw allow samba 是无效语法。ufw 不识别服务名,只识别端口或协议。

解决方案 :Samba 使用多个端口,正确放行方式为:

sudo ufw allow 137/udp
sudo ufw allow 138/udp
sudo ufw allow 139/tcp
sudo ufw allow 445/tcp

5.6 问题六: server responded with a status of 413 maxReqBodySize 已调大

现象 :即使把 maxReqBodySize 设为 100M,上传仍失败。

根因分析 :OpenLiteSpeed 有两个层级限制:一是虚拟主机级的 maxReqBodySize ,二是监听器(Listener)级的 Max Connection Max Keep-Alive Requests 。如果监听器配置过严,会覆盖虚拟主机设置。

排查命令

sudo grep -A 10 "listener" /usr/local/lsws/conf/httpd_config.conf | grep -E "(maxConn|keepAlive)"

解决方案 :在 WebAdmin 中,导航至 Configuration > Listeners > Default > Tuning ,将 Max Connections 设为 2000 Max Keep-Alive Requests 设为 1000

5.7 问题七: lsphp74 日志中大量 Failed loading /usr/local/lsws/lsphp74/lib/php/extensions/no-debug-non-zts-20190902/xdebug.so

现象 /usr/local/lsws/example.com/logs/php_error.log 每秒刷出 Xdebug 加载失败日志。

根因分析 :Xdebug 扩展是为标准 PHP 编译的,与 lsphp74 的 SAPI 不兼容。OpenLiteSpeed 不支持 Xdebug,强行加载会导致性能暴跌。

解决方案 :注释掉 php.ini 中的 zend_extension=xdebug.so 行。 lsphp74 php.ini 路径是 /usr/local/lsws/lsphp74/etc/php/7.4/litespeed/php.ini

实操心得:所有问题排查,都要遵循“从外到内”原则:先看浏览器表现(413/500),再看 ufw 状态( ufw status ),再看 lsws 服务状态( systemctl status lsws ),然后看 OpenLiteSpeed 日志( /usr/local/lsws/logs/error.log ),最后才深入到 PHP 日志。我见过太多人一上来就 nano php.ini ,结果浪费 2 小时,而 systemctl status lsws 早就提示 lsphp74 not found 了。真正的效率,来自清晰的排查路径。

6. 运维延伸与安全加固:让 OpenLiteSpeed 在 Ubuntu 18.04 上长期稳定运行

安装和配置只是开始,让 OpenLiteSpeed 在 Ubuntu 18.04 这个已停止标准支持的操作系统上持续稳定运行,需要一套组合拳。Ubuntu 18.04 的 ESM(Extended Security Maintenance)服务已于 2023 年 4 月结束,这意味着官方不再提供内核和关键组件的安全更新。但这不等于“不能用”,而是要求我们主动承担起安全加固的责任。以下是我为生产环境制定的 5 条铁律,每一条都经过至少 3 个客户环境的验证。

6.1 铁律一:禁用所有非必要模块,最小化攻击面

OpenLiteSpeed 默认启用 mod_security mod_geoip mod_magnet 等模块,但绝大多数网站用不到。每个启用的模块都是一个潜在的漏洞入口。在 WebAdmin 中,导航至 Configuration > Server > Modules ,只保留以下 3 个模块:

  • mod_accesscontrol (IP 访问控制,用于黑名单)
  • mod_cache (LSCache 核心)
  • mod_security2 (如果确实需要 WAF,否则禁用)

其余模块全部取消勾选。然后执行 sudo systemctl restart lsws 。禁用模块后, /usr/local/lsws/modules/ 目录下的 .so 文件不会被加载, lsof -i :80 显示的进程连接数也会显著减少。

6.2 铁律二:用 fail2ban 替代 OpenLiteSpeed 内置防火墙

OpenLiteSpeed 的“访问控制”功能很弱,只能做简单 IP 黑白名单。真正的暴力破解防护,必须交给 fail2ban。安装并配置:

sudo apt install fail2ban
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local

在文件末尾添加:

[openlitespeed-auth]
enabled = true
filter = openlitespeed-auth
logpath = /usr/local/lsws/logs/error.log
maxretry = 3
bantime = 3600

然后创建过滤器:

sudo nano /etc/fail2ban/filter.d/openlitespeed-auth.conf

内容为:

[Definition]
failregex = \[ERROR\] .* authentication failed for user.*$
ignoreregex =

最后重启: sudo systemctl restart fail2ban 。这样,任何 IP 在 1 小时内连续 3 次登录 WebAdmin 失败,就会被 ufw 自动封禁 1 小时。

更多推荐