从原版 OLS 迁移到 LiteHTTPD
如果你正在运行原版 OpenLiteSpeed(通过官方仓库、ols1clk.sh 脚本或手动下载安装),添加 LiteHTTPD 即可获得完整的 .htaccess 支持,无需更改现有配置。
原版 OLS 只处理少量 .htaccess 指令(主要是 RewriteFile 的基本重写规则)。LiteHTTPD 添加 80 种指令,包括 Header、Require、FilesMatch、AuthType Basic、If/ElseIf/Else 等。
| 功能 | 原版 OLS | 加装 LiteHTTPD |
|---|---|---|
| .htaccess 指令 | ~6(仅 RewriteFile) | 80 |
Require all denied | 返回 200(失效) | 返回 403 |
Header set | 被忽略 | 正常生效 |
RewriteRule [R=301] | 404 | 301 重定向 |
Options -Indexes | 404 | 403(需 patch 0004) |
FilesMatch ACL | 被忽略 | 正常执行 |
AuthType Basic | 不支持 | 完整支持 |
PHP php_value | 不支持 | 支持(Full 模式) |
.ht* 文件保护 | 可能被访问或 404 | 始终 403 |
| 静态文件性能 | 基线 | -5%(可忽略) |
| 内存开销 | 基线 | +13 MB |
RPM 安装(推荐)
Section titled “RPM 安装(推荐)”# 添加 LiteHTTPD 仓库并安装curl -s https://rpms.litehttpd.com/setup.sh | bashdnf install openlitespeed-litehttpd
# 重启systemctl restart lswsRPM 安装 Full 模式:打补丁的 OLS 二进制 + litehttpd_htaccess.so 模块 + 自动配置。RPM 使用 Conflicts: openlitespeed 替换原版包。
RPM 在首次安装时自动:
- 将 OLS 二进制替换为打补丁版本(4 个 patch)
- 安装
litehttpd_htaccess.so到/usr/local/lsws/modules/ - 在
httpd_config.conf中添加模块配置 - 在 Example vhost 中启用 rewrite
- 在
indexFiles中添加index.php
现有配置文件会被保留 — RPM 使用 %config(noreplace)。
Thin 模式(仅模块)
Section titled “Thin 模式(仅模块)”快速评估,不替换 OLS 二进制:
# 复制模块cp litehttpd_htaccess.so /usr/local/lsws/modules/
# 在 httpd_config.conf 中启用cat >> /usr/local/lsws/conf/httpd_config.conf <<'EOF'
module litehttpd_htaccess { ls_enabled 1}EOF
# 重启systemctl restart lswsThin 模式限制:
RewriteRule/RewriteCond会被解析但不执行php_value/php_flag会被解析但不传递给 lsphpOptions -Indexes不会返回 403readApacheConf不可用
之后可以通过安装 RPM 升级到 Full 模式。
# 克隆 OLS,应用补丁,构建git clone --branch v1.8.5 https://github.com/litespeedtech/openlitespeed.gitcd openlitespeedpatch -p1 < /path/to/patches/0001-lsiapi-phpconfig.patchpatch -p1 < /path/to/patches/0002-lsiapi-rewrite.patchpatch -p1 < /path/to/patches/0003-readapacheconf.patchpatch -p1 < /path/to/patches/0004-autoindex-403.patchbash build.sh
# 构建模块cd /path/to/litehttpdcmake -B build -DCMAKE_BUILD_TYPE=Releasecmake --build build --target litehttpd_htaccesscp build/litehttpd_htaccess.so /usr/local/lsws/modules/防止自动升级覆盖二进制
Section titled “防止自动升级覆盖二进制”如果你之前从官方 LiteSpeed 仓库安装了 OLS,包管理器更新可能会恢复到原版二进制。
# 锁定包版本(EL 8/9/10)dnf install python3-dnf-plugin-versionlockdnf versionlock add openlitespeed
# 或在更新时排除echo "exclude=openlitespeed" >> /etc/dnf/dnf.conf同时禁用 OLS 内置升级脚本,防止 WebAdmin 控制台触发原地升级:
mv /usr/local/lsws/admin/misc/lsup.sh /usr/local/lsws/admin/misc/lsup.sh.bak禁用 OLS autoLoadHtaccess
Section titled “禁用 OLS autoLoadHtaccess”如果 vhost 配置中有 OLS 原生的 autoLoadHtaccess 1,需禁用它。OLS 原生 .htaccess 解析器处理少量指令(主要是 ErrorDocument、Options)。LiteHTTPD 也处理这些指令,同时启用会导致双重处理。
# 检查当前状态grep -r 'autoLoadHtaccess' /usr/local/lsws/conf/vhosts/
# 如果设为 1,改为 0sed -i 's/autoLoadHtaccess.*1/autoLoadHtaccess 0/' /usr/local/lsws/conf/vhosts/*/vhost.conf安装 LiteHTTPD 后,注意以下变化:
安全性改进(自动生效)
Section titled “安全性改进(自动生效)”-
.ht*文件被阻止 — 对.htaccess、.htpasswd等文件的请求返回 403。原版 OLS 可能会直接提供文件内容(安全风险)或返回 404。LiteHTTPD 匹配 Apache 默认的<Files ".ht*"> Require all denied</Files>行为。 -
路径遍历被阻止 — 编码的
../序列(如%2e%2e/)返回 403,而非原版 OLS 的 400/404。
.htaccess 指令现在生效了
Section titled “.htaccess 指令现在生效了”这一点很重要。 如果你的文档根目录中的 .htaccess 文件包含原版 OLS 之前忽略的指令,这些指令现在会生效。例如:
Require all denied在某个目录中现在会真正阻止访问(403)Header set X-Frame-Options DENY现在会添加响应头FilesMatch规则现在会执行访问控制
在生产环境启用 LiteHTTPD 前请检查你的 .htaccess 文件。
Handler 指令(无操作)
Section titled “Handler 指令(无操作)”AddHandler、SetHandler、RemoveHandler 和 Action 会被解析但不会改变请求处理方式。OLS 使用 vhost 配置中的 scriptHandler 进行处理器映射。
ExecCGI 被阻止
Section titled “ExecCGI 被阻止”.htaccess 中的 Options +ExecCGI 会被静默忽略。OLS 不支持通过 .htaccess 执行 CGI。
# 检查模块已加载grep 'litehttpd_htaccess' /usr/local/lsws/conf/httpd_config.conf
# 验证补丁(仅 Full 模式)strings /usr/local/lsws/bin/openlitespeed | grep -q 'set_php_config_value' && echo "patch 0001 OK"strings /usr/local/lsws/bin/openlitespeed | grep -q 'parse_rewrite_rules' && echo "patch 0002 OK"strings /usr/local/lsws/bin/openlitespeed | grep -q 'readApacheConf' && echo "patch 0003 OK"
# 测试 .htaccess 处理echo 'Header set X-LiteHTTPD "active"' > /var/www/html/.htaccesscurl -sI http://localhost/ | grep X-LiteHTTPD# 预期:X-LiteHTTPD: active不受影响的部分
Section titled “不受影响的部分”- 现有 OLS 配置文件保持不变
- 虚拟主机设置、监听器和 SSL 配置不变
- PHP(lsphp)配置不变
- OLS 管理面板继续正常工作
- LSCache / LiteSpeed Cache 插件正常工作
- HTTP/3 / QUIC 不变