Ubuntu 18.04 下 OpenLiteSpeed 部署实战:高性能Web服务器零配置PHP与HTTP/3支持
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 小时。
更多推荐
所有评论(0)