惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Microsoft Azure Blog
Microsoft Azure Blog
博客园_首页
Forbes - Security
Forbes - Security
WordPress大学
WordPress大学
P
Proofpoint News Feed
T
Threat Research - Cisco Blogs
L
LINUX DO - 热门话题
L
Lohrmann on Cybersecurity
Spread Privacy
Spread Privacy
D
Darknet – Hacking Tools, Hacker News & Cyber Security
大猫的无限游戏
大猫的无限游戏
博客园 - 三生石上(FineUI控件)
P
Privacy International News Feed
A
About on SuperTechFans
T
Tailwind CSS Blog
I
InfoQ
S
Securelist
云风的 BLOG
云风的 BLOG
罗磊的独立博客
Recent Announcements
Recent Announcements
T
The Exploit Database - CXSecurity.com
B
Blog RSS Feed
V
Visual Studio Blog
Know Your Adversary
Know Your Adversary
The GitHub Blog
The GitHub Blog
Jina AI
Jina AI
腾讯CDC
Cyberwarzone
Cyberwarzone
有赞技术团队
有赞技术团队
AWS News Blog
AWS News Blog
博客园 - 【当耐特】
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
F
Full Disclosure
S
Secure Thoughts
博客园 - 司徒正美
J
Java Code Geeks
Y
Y Combinator Blog
Google Online Security Blog
Google Online Security Blog
GbyAI
GbyAI
N
News and Events Feed by Topic
Help Net Security
Help Net Security
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Project Zero
Project Zero
T
Tenable Blog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
T
Tor Project blog
MyScale Blog
MyScale Blog
Scott Helme
Scott Helme
小众软件
小众软件
K
Kaspersky official blog

Liups233の小站

YubiKey OpenPGP 智能卡使用指南 - Liups233の小站 通过 WKD / OPENPGPKEY DNS 记录部署 GPG 公钥 - Liups233の小站 使用 DNSCrypt-Proxy 为 Linux 配置加密 DNS - Liups233 WordPress 7.0 编辑器改回无衬线字体 - Liups233の小站 Redis 数据库权限与 Unix Socket 配置 - Liups233の小站 Cloudflare 设置 mTLS 验证来源拉取 - Liups233の小站 Docker 自建 RustDesk 远程和 API 服务 - Liups233の小站 ChatGPT Go 印度区免费试用白嫖 1 年 - Liups233の小站 使用 S/MIME 证书签名并加密电子邮件 - Liups233の小站 为 WordPress 外发邮件添加 S/MIME 签名 - Liups233の小站 网站域名变更迁移教程/记录 - Liups233の小站 将动漫视频刻录为视频光盘-蓝光/AVCHD DVD - Liups233の小站 百乐 CUSTOM 912 钢笔使用体验 - Liups233の小站 使用 Cloudflare mTLS 用户端凭证保护博客登入页面 - Liups233の小站 Kobo 手动安装 NickelMenu 和 KOReader - Liups233の小站 Kobo 阅读器字典缺字解决 - Liups233の小站 iCloud+ 域名邮箱的注册和使用 - Liups233の小站 9 美元一年的通配符 SSL 证书 - Liups233の小站 宝塔面板 Nginx 启用 Brotli 和 Pagespeed - Liups233の小站 拷贝 DVD/Blu-ray 光盘并使用 MeGUI 压制 - Liups233の小站 Spotify 相较 Apple Music 的优点 - Liups233の小站 欧卡/美卡自定义手排挡位布局 - Liups233の小站 内地居民到港开户汇丰和中银香港全过程 - Liups233の小站 给光驱刷入 LibreDrive 固件解锁区域和加密限制 - Liups233の小站 个人博客适用的 Cloudflare 防火墙和缓存规则 - Liups233の小站 为Kobo阅读器添加Google Drive和Dropbox功能 - Liups233の小站 百乐 PILOT Capless Fermo 钢笔评测 - Liups233の小站 业余无线电 B 类考试笔记 - Liups233の小站 黑白阅读器的绝唱?Kobo Clara BW 简单评测 - Liups233の小站 八重洲 WIRES-X 网络注册与使用教程 - Liups233の小站 异世的同路人 — 恋语 Juliamo 游戏简评 - Liups233の小站 欢迎加入我的 FreeDMR 服务器 - Liups233の小站 低至 6 港币一年的 Club SIM eSIM 保号卡 - Liups233の小站 H310/H710(P)/H810 阵列卡刷写为直通模式 - Liups233の小站
OpenLiteSpeed 安装与建站配置 详细教程 - Liups233
Liups233 · 2026-06-06 · via Liups233の小站

前言

最近弄了免费的服务器😋,想脱离宝塔面板搭建网站了,但纯手工配置又感觉很难,而且难保不会出现一些安全性问题,于是就研究起了之前在共享主机上用过的 LiteSpeed Enterprise,用来跑 WordPress 很不错,还有官方插件。而 OpenLiteSpeed 相当于一个开源版,支持 LiteSpeed Enterprise 的大部分功能,而且带一个 Web 面板,可以方便修改网页服务器的各种设置,很容易上手。

本教程讲述如何在 Linux 上安装 OpenLiteSpeed,以及如何建好一个 WordPress 网站,也会涉及到 MySQL、LSPHP、phpMyAdmin、Cloudflare 等配置。本教程使用全新安装的 AlmaLinux 10.1(RHEL 系)演示,其他发行版类似。

封面图来自 OpenLiteSpeed

目录

先决条件

安装相关软件

OpenLiteSpeed 和 LSPHP

执行以下命令可以安装 OpenLiteSpeed 软件源(脚本来自官方,若有疑虑,可先审阅),同时会启用相关软件源:

sudo wget -O - https://repo.litespeed.sh | sudo bash
sudo dnf update

然后安装 OpenLiteSpeed 及 WordPress 相关依赖(包含 LSPHP 8.3 及扩展,LSPHP 是带有 LiteSpeed API 的 PHP 变体,所以不用再安装 PHP 了):

sudo dnf install openlitespeed lsphp83-bcmath lsphp83-intl lsphp83-pecl-redis lsphp83-pecl-imagick lsphp83-pecl-imagick lsphp83-sodium

在安装快结束的时候,会产生一个随机的临时密码用于管理员登录后台,默认用户名为 admin,临时密码为斜杠后面一坨:

OpenLiteSpeed 安装过程产生的临时密码
安装过程产生的临时密码

如果忘记用户名或密码,可使用 sudo /usr/local/lsws/admin/misc/admpass.sh 重置。

MySQL

执行以下命令来安装 MySQL 8.4 数据库及相关依赖:

sudo dnf install mysql8.4-server

重要:为了未来可能的迁移,需要设置表名和库名在存储和比较时不区分大小写以增大兼容性:

echo "lower_case_table_names=1" | sudo tee -a /etc/my.cnf.d/m
ysql-server.cnf

然后启动 MySQL 服务并开机自启:

sudo systemctl enable --now mysqld

然后执行以下命令进行基本的 MySQL 配置:

sudo mysql_secure_installation
  • 询问是否验证密码强度,输入 y 确认,以提高安全性
  • 询问强制的密码强度等级,输入 2 确认,也就是需要长度大于 8 位,包含数字、大小写、特殊符号的密码,且不能有常用单词
  • 然后输入你想使用的 MySQL root 用户密码(输入密码时不会显示),建议新开一个 SSH 窗口,使用 openssl rand -base64 24 命令生成一个 24 位的随机密码粘贴进去
  • 确认一遍密码,这一遍可以手动输入
  • 然后告诉你你输入密码的强度,询问你是否要使用这个密码,输入 y 确认
  • 接下来所有询问,比如是否仅允许本地使用 root 用户登入,是否删除匿名用户和测试数据库,直接全输入 y 确认即可

Redis

安装 OpenLiteSpeed 时,应该是启用了 Remi 软件源的,我们可以使用 sudo dnf module list redis 查看包含 redis 包的软件源,应有类似以下输出:

查看可用的 Redis 源
查看可用的 Redis 源

然后我们使用 sudo dnf module enable redis:remi-8.6 来启用最新版的 Redis 源,然后使用 sudo dnf install redis 即可安装,最后使用 sudo systemctl enable --now redis 来启动 Redis 并设置开机自启。

配置文件修改

MySQL

修改 Socket 位置和数据目录权限

使用 sudo nano /etc/my.cnf.d/mysql-server.cnf 编辑 MySQL 服务端的配置文件。

MySQL 服务端配置文件
MySQL 服务端配置文件

可以看到,默认情况下,MySQL 将数据库数据和 Socket 都存放在 /var/lib/mysql 目录下,通过 ls -lZa /var/lib/mysql 我们可以发现这个数据目录具有 drwxr-xr-x(755)权限,和 system_u:object_r:mysqld_db_t:s0 的 SELinux 上下文(仅允许 mysqld 进程访问该文件夹)。

你可能会觉得这样已经够安全了,事实上也确实没有太大风险。但我还是喜欢将 Socket 移动到 /var/run/mysqld 里面(就像 Debian 一样),并且将 /var/lib/mysql 数据目录设置为 750 权限(不允许非 mysql 用户写入,不允许非 mysql 组用户读取)。如果你不想设置,可以跳过本节,同时在之后的 LSPHP 配置中,也不要设置 pdo_mysql.default_socketmysqli.default_socket

继续编辑 /etc/my.cnf.d/mysql-server.cnf,将 socket=/var/lib/mysql/mysql.sock 改为 socket=/var/run/mysqld/mysqld.sock,同时在下面新增这一行,如图:

mysqlx_socket=/var/run/mysqld/mysqlx.sock
更改 Socket 位置
服务端更改 Socket 位置

另外,还需要修改 /etc/my.cnf.d/client.cnf,在 [client] 部分加入以下内容,如图:

socket=/var/run/mysqld/mysqld.sock
mysqlx-socket=/var/run/mysqld/mysqlx.sock
Client 配置修改 Socket 位置
Client 配置修改 Socket 位置

性能优化

这一部分建议让 AI 给你生成配置(记得开深度思考),你可以用类似以下的问法,<> 中内容按照你的实际情况填写:

我正在配置 MySQL 8.4 服务端的性能设置。我的 VPS 有 <> GB 内存,使用 <> CPU(主频 <> GHz)的 <> 个核心,硬盘速度 <慢、中、快>,同时会运行 OpenLiteSpeed、LSPHP 和 Redis。我的网站是 <> 类型,访问量 <少、中、多>。我的 mysql-server.cnf 已经有以下内容,请为我生成接下来的适合于我服务器的 mysqld 配置(例如内存分配、临时表、缓存、关闭二进制日志等优化项,暂时不需要生成 OpenLiteSpeed、LSPHP 和 Redis 的配置):

[mysqld]
datadir=/var/lib/mysql
socket=/var/run/mysqld/mysqld.sock
mysqlx_socket=/var/run/mysqld/mysqlx.sock
log-error=/var/log/mysql/mysqld.log
pid-file=/run/mysqld/mysqld.pid

lower_case_table_names=1

注意:我使用的是 MySQL 8.4,请不要生成老旧的参数如 query_cache_type=0。

以 4 核 E5-2696 v4 + 4 GB 内存为例,生成的配置应该类似下面这样,写入 /etc/my.cnf.d/mysql-server.cnf 即可:

[mysqld]
# 基础路径配置(保留你原有设置)
datadir=/var/lib/mysql
socket=/var/run/mysqld/mysqld.sock
mysqlx_socket=/var/run/mysqld/mysqlx.sock
log-error=/var/log/mysql/mysqld.log
pid-file=/run/mysqld/mysqld.pid

# 表名大小写不敏感(保留你原有设置)
lower_case_table_names=1

# ==================== 核心优化:内存分配(4GB VPS 专属)====================
# 给MySQL总分配约1.2GB内存,剩余2.8GB供系统/OLS/LSPHP使用,低访问完全足够
# InnoDB缓冲池(MySQL最核心参数,占用800M,博客性能关键)
innodb_buffer_pool_size = 800M
# 缓冲池实例数(匹配4核CPU,提升并发效率)
innodb_buffer_pool_instances = 4
# InnoDB日志文件大小(中速硬盘最优值,平衡写入性能)
innodb_log_file_size = 128M
# InnoDB日志缓冲区(小博客默认值即可)
innodb_log_buffer_size = 16M

# ==================== 关闭冗余日志(低访问必备,节省性能/磁盘)====================
# 关闭二进制日志(无需主从复制,个人博客完全用不到)
skip_log_bin
disable_log_bin
# 关闭慢查询日志(低访问无分析需求)
slow_query_log = 0
# 关闭通用查询日志(默认关闭,强制禁用)
general_log = 0

# ==================== InnoDB 引擎优化(中速硬盘 + 低访问)====================
# 默认存储引擎(强制InnoDB)
default-storage-engine = InnoDB
# 每个表独立表空间(默认开启,优化表管理)
innodb_file_per_table = 1
# 磁盘刷新模式(避免双缓冲,提升中速硬盘性能)
innodb_flush_method = O_DIRECT
# 事务刷新策略(2=平衡性能+安全,博客崩溃最多丢1秒数据,性价比最高)
innodb_flush_log_at_trx_commit = 2
# 关闭元数据统计(提升查询速度)
innodb_stats_on_metadata = 0

# ==================== 连接数 & 线程(低访问轻量化)====================
# 最大连接数(个人博客100完全足够,默认值过大浪费资源)
max_connections = 100
# 线程缓存(复用连接,减少CPU开销)
thread_cache_size = 8
# 空闲连接自动关闭时间(10分钟,释放闲置资源)
wait_timeout = 600
interactive_timeout = 600

# ==================== 临时表 & 排序缓存(小博客轻量化)====================
# 内存临时表大小(防止磁盘临时表,提升速度)
tmp_table_size = 64M
max_heap_table_size = 64M
# 排序/连接/读取缓存(低访问小值即可,避免内存浪费)
sort_buffer_size = 2M
join_buffer_size = 2M
read_buffer_size = 1M
read_rnd_buffer_size = 2M

# ==================== 表缓存 & 文件限制====================
table_open_cache = 2048
table_definition_cache = 1024
open_files_limit = 65535

# ==================== 通用安全 & 字符集====================
# 最大数据包(防止导入/上传大数据报错)
max_allowed_packet = 64M
# 默认字符集(支持emoji,适配现代博客)
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

然后使用 sudo systemctl restart mysqld.service 来重启 MySQL 服务。但是这一步大概会重启失败,可以使用 cat /var/log/mysql/mysqld.log | grep -E "ERROR|Warning" 来查看日志中的警告和错误,然后发给 AI 询问,改好后再重启。

LSPHP

注意:PHP 相关配置文件每行前面的分号 ; 表示注释,修改配置记得把相关分号去掉。

修改 MySQL Socket 位置

注意:如果你在上面没有改 MySQL Socket 的位置,请跳过本小节。此处以 LSPHP 8.3 为例,其它版本请对应修改命令。

先用 sudo nano /usr/local/lsws/lsphp83/etc/php.ini 打开 LSPHP 主配置文件,CTRL + W 搜索 mysqli.default_socket(大概在 1141 行),然后改成下面这样:

mysqli.default_socket = /var/run/mysqld/mysqld.sock

再用 CTRL + W 搜索 pdo_mysql.default_socket(大概在 1034 行),然后改成下面这样:

pdo_mysql.default_socket=/var/run/mysqld/mysqld.sock
LSPHP 修改 MySQL Socket 位置
LSPHP 修改 MySQL Socket 位置

禁用部分 PHP 函数

有一些 PHP 函数还是比较危险的,比如 execsystem,连宝塔面板都禁用了。我们可以在打开的 php.ini 里搜索 disable_functions(大概在 333 行),然后将这一行改为以下内容:

disable_functions = passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv
禁用部分 PHP 函数
禁用部分 PHP 函数

其它 PHP 配置

这一部分也建议让 AI 给你生成配置(记得开深度思考),你可以接着刚才 MySQL 的对话,用类似以下的问法,<> 中内容按照你的实际情况填写:

我正在配置 LSPHP 8.3 的 php.ini。我的 VPS 有 <> GB 内存,使用 <> CPU(主频 <> GHz)的 <> 个核心,硬盘速度 <慢、中、快>,同时会运行 OpenLiteSpeed、MySQL 和 Redis。我的网站是 <> 类型,访问量 <少、中、多>,我已经给 MySQL 分配了约 <> GB 内存。另外,我已经在 php.ini 里设置了 MySQL Socket 的位置,并禁用了部分危险的 PHP 函数。请为我生成适合于我服务器和 phpMyAdmin 的 PHP 配置(例如基础 PHP 配置如 memory_limit max_execution_time post_max_size,和 OPcache 优化等。暂时不需要生成 OpenLiteSpeed、MySQL 和 Redis 的配置)。

然后就会生成 PHP 和 OPcache 的配置了,应该直接将这些配置粘贴到 /usr/local/lsws/lsphp83/etc/php.ini 的底部就行了。但如果你想更美观,可以修改 php.ini 的原有配置,例如如果 AI 说 memory_limit = 256M,那可以先在原本的配置文件里搜索 memory_limit,然后将后面的值改为 256M;在修改 OPcache 配置的时候,也可以打开已有的配置文件 /usr/local/lsws/lsphp83/etc/php.d/10-opcache.ini 进行编辑(别忘了删掉注释用的分号)。

全部修改好后,使用 sudo touch /usr/local/lsws/admin/tmp/.lsphp_restart.txt 来重启 LSPHP(是的,就是用创建文件的方式来重启,下次要重启还是这个命令,覆盖文件即可)。

Redis

配置文件位于 /etc/redis/redis.conf,还是推荐用 AI 生成配置,问法如下:

我正在配置 Redis 8.6 的 redis.conf。我的 VPS 有 <> GB 内存,使用 <> CPU(主频 <> GHz)的 <> 个核心,硬盘速度 <慢、中、快>,同时会运行 OpenLiteSpeed、MySQL 和 LSPHP。我的网站是 <> 类型,访问量 <少、中、多>。我已经给 MySQL 分配了约 <> GB 内存,单 PHP 进程最大内存为 <> MB,请为我生成适合于我服务器的 Redis 服务器配置(例如内存限制、缓存淘汰策略、关闭持久化等性能优化。暂时不需要生成 OpenLiteSpeed、MySQL 和 LSPHP 的配置)。

生成的内容可以直接复制到现有配置文件的底部,也可以修改已经有的配置。注释较多,也可以读下,眼睛别看花了就行😇。

但是,默认情况下的 Redis 可以被任何人读写所有内容,比较危险;默认使用的 TCP 连接方式(即使用 127.0.0.1 来连接),相比 MySQL 的 Socket 方式效率更低。如果你想了解更多,可以在完成了本篇教程后继续研究 Redis,教程见本人另一篇文章〈Redis 数据库权限与 Unix Socket 配置〉。

访问 https://<服务器 IP>:7080 即可打开 OpenLiteSpeed 仪表板。但为了安全性,不建议在防火墙里开放 7080 端口,而是使用 SSH 将 HTTP 服务端口转发到本地,同时发送心跳包来保持连接。但为了避免服务器被墙,也可以指定通过代理进行 SSH 连接,例如:

ssh -L 7080:localhost:7080 -o "ProxyCommand=nc -X 5 -x 127.0.0.1:7897 %h %p" -o "ServerAliveInterval=30" -o "ServerAliveCountMax=3" -i <密钥> -p <SSH 端口> <用户名>@<服务器 IP>
# nc -X 5 表示 SOCKS5 代理

之后在本地直接访问 https://127.0.0.1:7080 即可打开仪表板,安全证书警告应该是可以忽略的。仪表板右上角可以修改语言。

登入后,点击左侧的「服务器配置」,进入整个服务器的整体设置部分。这个部分定义了服务器整体(包含所有虚拟主机)的运行逻辑。

日志设置

点击 日志 选项卡,再点击 服务器日志 右侧的编辑,将 保留天数 改为 30,意为 30 天以前的日志会被自动删除。另外,如果硬盘性能一般,例如 RAID-10 的机械盘,可以将日志级别从 DEBUG 调到 WARNING,可以减少硬盘写入。

然后点击保存,之后会提示执行平滑重启后才能生效。我们先不急着重启,先把接下来的配置改了先。

压缩设置

本节主要是调低网页服务器压缩等级,如果你不用 Cloudflare 等带有内容压缩功能的 CDN,或 CPU 性能够强,可以跳过本节。

点击 调优 选项卡,翻到下面的 GZIP / Brotli 压缩,点击编辑。将压缩级别(动态内容)、GZIP压缩级别(静态文件)、Brotli压缩级别(静态文件)都设置为 2,然后保存。

受信 IP 设置

如果你不用 Cloudflare 等 CDN 或者 LiteSpeed WordPress 插件中的 QUIC.cloud 服务(稍后会提到),就跳过本节。

点击 常规 选项卡,点击 常规设置 一栏右边的编辑,将 使用报头中的客户端 IP 改为 仅限受信任的 IP,然后保存。你也可以点击旁边的问号按钮看看这个选项是什么意思。

再点击 安全 选项卡,点击最下面的 访问控制 一栏的编辑,在允许列表已有的 ALL 之后,以逗号分隔,添加以下以 T 结尾的 IP/CIDR:

添加可信 IP
添加受信 IP

以 T 结尾,表示这个 IP 是受信任的。只有在请求来自受信任 IP 时,X-Forwarded-For 中的客户端 IP 才会被使用,CDN 和 QUIC.cloud 服务才能正常工作。保存后,就可以进行平滑重启了。

phpMyAdmin 虚拟主机

基础设置

点击仪表板左侧的 虚拟主机,在添加虚拟主机前,我们可以先看下自带的这个 Example 虚拟主机是怎么配置的,比如虚拟主机根目录、配置文件目录、文档根目录等。可以看到它的虚拟主机根目录设置的是 Example/,这是一个相对地址,完整地址是 /user/local/lsws/Example/。配置文件目录也类似。

我们可以照着 Example 的配置来添加一个新的虚拟主机。不过在此之前,可以先创建好相应的目录:

sudo mkdir -p /usr/local/lsws/phpMyAdmin/html

然后添加一个虚拟主机,初始配置如下:

  • 虚拟主机名:phpMyAdmin
  • 虚拟主机根目录:phpMyAdmin/
  • 配置文件:conf/vhosts/phpMyAdmin/vhconf.conf
  • 启用脚本/外部应用程序:
  • 访问管制:

然后点击保存后,应该会提示配置文件不存在,点击 CLICK TO CREATE 让它自动创建即可,然后再点保存。然后使用 ls -la /usr/local/lsws/conf/vhosts/phpMyAdmin/ 可以发现配置文件的权限是仅 lsadm 用户(即管理控制台所属的用户)有读写权限,而运行网页服务器和 LSPHP 的 nobody 用户没有任何权限。

然后我们就准备下载 phpMyAdmin 的文件了。前往 下载页面,在最新版的 zip 文件上右键,点击复制链接网址,然后在服务器里下载,并解压复制到相应目录(此处以 5.2.3 版本为例):

cd /usr/local/lsws/phpMyAdmin/
sudo wget "https://files.phpmyadmin.net/phpMyAdmin/5.2.3/phpMyAdmin-5.2.3-all-languages.zip"
sudo unzip phpMyAdmin-5.2.3-all-languages.zip
sudo cp -R phpMyAdmin-5.2.3-all-languages/* html/

然后还需要配置 cookie 加密,先随机生成 32 个字符:

tr -dc 'A-Za-z0-9' < /dev/urandom | head -c 32; echo

然后编辑 phpMyAdmin 的配置:

sudo cp /usr/local/lsws/phpMyAdmin/html/config.sample.inc.php /usr/local/lsws/phpMyAdmin/html/config.inc.php
sudo nano /usr/local/lsws/phpMyAdmin/html/config.inc.php

将随机字符填入 $cfg['blowfish_secret'],如图,然后保存:

修改 cookie 密钥
修改 cookie 密钥

接下来还要设置权限:

sudo chown -R lsadm:nobody /usr/local/lsws/phpMyAdmin
sudo chown -R nobody:nobody /usr/local/lsws/phpMyAdmin/html
sudo find /usr/local/lsws/phpMyAdmin/ -type d -exec chmod 700 {} +
sudo find /usr/local/lsws/phpMyAdmin/ -type f -exec chmod 600 {} +
sudo chmod 710 /usr/local/lsws/phpMyAdmin

让我解释一下,这个设置主要是为了防止网页服务器和 LSPHP 越权访问:

  • 我们为虚拟主机根目录设置了属于 lsadm 用户和 nobody 组,html 文件目录属于 nobody 用户和 nobody 组
  • 然后将虚拟主机根目录下的所有文件夹设置为仅允许所属用户读写、进入并列出内容,所属组的用户和其他用户无任何权限;虚拟主机根目录下的所有文件设置为仅允许所属用户读写但不允许执行,所属组的用户和其他用户无任何权限
  • 最后让虚拟主机根目录本身可以被所属组用户进入并列出内容
phpmyadmin file permission
phpMyAdmin 虚拟主机文件夹权限

其它设置

回到 OpenLiteSpeed 仪表板,先不急着平滑重启,还有别的要设置。

点击虚拟主机的 常规 选项卡,编辑核心设置,将 文档根目录 设定为 $VH_ROOT/html(此处的 $VH_ROOT 表示虚拟主机根目录,即 /usr/local/lsws/phpMyAdmin)。

点击 安全 选项卡,编辑访问控制,在允许列表里填入 127.0.0.1,在拒绝列表里填入 ALL,即只允许本机访问(我们要访问也是通过 SSH 本地转发隧道去访问,相当于本机访问)。

点击 重写 选项卡,编辑重写控制,将 启用重写 和 自动从 .htaccess 加载 选为

在 SSL 选项卡里可以配置这个虚拟主机的安全证书,但由于我们只会本地访问,所以不用配置了。

监听器设置

点击仪表板左侧的 监听器,点击自带的 Default 监听器,编辑地址设置:

  • 将 监听器名称 改为 phpMyAdmin,因为这个监听器监听的 8088 端口只会用于 phpMyAdmin。如果以后有个新的服务要使用别的端口,需要创建一个新的监听器,监听新的端口(一个监听器只能监听一个端口)
  • 将 IP地址 改为 127.0.0.1,表示这个监听器只会监听本机连接

保存后,看到虚拟主机映射,将自带的 Example 映射删掉,添加一个新映射:

  • 虚拟主机:phpMyAdmin
  • 域名:*
phpMyAdmin 监听器设置
phpMyAdmin 监听器设置

保存后,就可以平滑重启了。然后我们可以新建一个 SSH 连接,通过代理转发服务器的 8088 端口到本地:

ssh -L 8088:localhost:8088 -o "ProxyCommand=nc -X 5 -x 127.0.0.1:7897 %h %p" -o "ServerAliveInterval=30" -o "ServerAliveCountMax=3" -i <密钥> -p <SSH 端口> <用户名>@<服务器 IP>

创建数据库和用户

设定储存空间

SSH 端口转发后,本地访问 http://127.0.0.1:8088,即可打开 phpMyAdmin 页面。输入 MySQL 用户 root 和密码登入。登入后会看到一个提示,尚未设定 phpMyAdmin 设定储存空间。我们可以先点击左侧已有的 mysql 数据库,再点击工具栏的 操作,再点击提示里的 了解原因,最后点击 建立。

设定储存空间 - 1
设定储存空间 – 1
设定储存空间 - 2
设定储存空间 – 2

创建 WordPress 数据库

点击左上角 Logo 下面的 首页🏠 按钮,再点击工具栏的 数据库,建立一个名为 wordpress 的数据库,编码选择 utf8mb4_unicode_ci

创建用户并赋予权限

创建好后,回到首页,点击工具栏的 使用者帐号,再点击 新增使用者帐号,填写内容如下:

  • 使用者名称:wordpress
  • 主机名称:本机(然后后面的框会自动填入 localhost
  • 密码:不用手动填写,点击下方的 产生密码 即可
  • 剩下的东西都不要选,直接点最下面的 执行 即可
创建用户 - 1
创建用户 – 1
创建用户 - 2
创建用户 – 2

创建好用户后,点击 数据库 来编辑用户权限,再选中刚才新建的 wordpress 数据库,点击 执行。在 指定数据库权限 旁边,点击 全选,再将 GRANT 权限取消掉,最后点击执行。

赋予权限 - 1
赋予权限 – 1
赋予权限 - 2
赋予权限 – 2

至此,用于 WordPress 的数据库和用户都创建好了,接下来就准备安装 WordPress 了。

WordPress 虚拟主机

基础设置

添加虚拟主机前,先创建文件夹 sudo mkdir -p /usr/local/lsws/WordPress/html,然后回到 OpenLiteSpeed 仪表板,点击左侧的 虚拟主机,添加一个新的虚拟主机,基本配置如下:

  • 虚拟主机名:WordPress
  • 虚拟主机根目录:WordPress/
  • 配置文件:conf/vhosts/WordPress/vhconf.conf
  • 启用脚本/外部应用程序:
  • 访问管制:

然后点击保存后,还是会提示配置文件不存在,点击 CLICK TO CREATE 让它自动创建即可,然后再点保存。

然后就需要下载 WordPress 文件了,并解压复制到对应目录:

cd /usr/local/lsws/WordPress
sudo wget "https://cn.wordpress.org/latest-zh_CN.zip"
sudo unzip latest-zh_CN.zip
sudo cp -R wordpress/* html/

然后设置一下文件权限:

sudo chown -R lsadm:nobody /usr/local/lsws/WordPress
sudo chown -R nobody:nobody /usr/local/lsws/WordPress/html
sudo find /usr/local/lsws/WordPress/ -type d -exec chmod 700 {} +
sudo find /usr/local/lsws/WordPress/ -type f -exec chmod 600 {} +
sudo chmod 710 /usr/local/lsws/WordPress

其它设置

点击虚拟主机的 常规 选项卡,编辑核心设置,将 文档根目录 设定为 $VH_ROOT/html,域名设置为你的完整域名。点击 重写 选项卡,编辑重写控制,将 启用重写 和 自动从 .htaccess 加载 选为 。然后 SSL 证书配置将会写在配置完监听器之后。

监听器设置

点击仪表板左侧的 监听器,添加一个监听器,用于监听 443 端口的 IPv4 流量:

  • 监听器名称:WordPress
  • IP 地址:ANY IPv4
  • 端口:443
  • 启用 REUSEPORT:
  • 加密连接:

保存后,添加一个虚拟主机映射:

  • 虚拟主机:刚才创建的 WordPress
  • 域名:你的完整域名
监听器基本设置
监听器基本设置

然后回到上一页,再添加一个监听器,用于监听 443 端口的 IPv6 流量(没有 IPv6 地址就不用添加了):

  • 监听器名称:WordPress IPv6
  • IP 地址:[ANY] IPv6
  • 端口:443
  • 启用 REUSEPORT:
  • 加密连接:

保存后,添加一个相同的虚拟主机映射:

  • 虚拟主机:刚才创建的 WordPress
  • 域名:你的完整域名

SSL 设置

注:这部分内容仅适用于使用 Cloudflare CDN 的网站,其他用户仅供参考

SSL 设置将会分为两部分:监听器和虚拟主机,主要是为了避免攻击者通过 SSL 证书找到源站 IP。你可以这样理解:假如监听器 SSL 和虚拟主机使用了同一个 SSL 证书,且这个证书是包含域名信息的,那么攻击者通过扫描所有 IP 地址的 443 端口,并抓取扫描到的证书里的域名,即可找到源站 IP,CDN 就形同虚设了。

为了避免被找到 IP,我们会在监听器里设置一个不包含任何相关信息的 SSL 证书,同时会在虚拟主机里使用 Cloudflare 的原始服务器证书,也不包含域名信息,仅会在 Cloudflare 边缘服务器和源站之间使用。

监听器 SSL

先创建自签名证书:

cd /usr/local/lsws/conf/cert

# 生成 ECC P-256 的自签名 SSL 证书,并随机指定一个 CN
sudo openssl req -x509 -newkey ec -pkeyopt ec_paramgen_curve:prime256v1 -keyout lsws-blank.pem -out lsws-blank.crt -nodes -days 36500 -subj "/CN=$(uuidgen)"

# 权限设定
sudo chown lsadm:nobody lsws-blank.*
sudo chmod 640 lsws-blank.*

然后回到监听器界面,点击刚才创建的 WordPress 监听器,点进 SSL 选项卡,点击 SSL 私钥和证书 右侧的编辑,填写以下信息后保存:

  • 私钥文件:conf/cert/lsws-blank.pem
  • 证书文件:conf/cert/lsws-blank.crt

再点击 SSL 协议 右边的编辑,协议版本选择 TLS 1.2 和 TLS 1.3(如果要更安全也可以只选 1.3),并启用 ECDH 密钥交换和 DH 密钥交换,然后保存,IPv4 的监听器就配置完成了。对于 IPv6 监听器也需要同样的配置(设置 SSL 证书目录、协议配置)。

监听器 SSL 配置
监听器 SSL 配置

虚拟主机 SSL

我们先从 Cloudflare 获取一个原始服务器证书。打开 Cloudflare 仪表板,然后点击你的域名,再点击左侧工具栏的 SSL/TLS,选择原始服务器,然后创建一个源站(Origin)证书:

  • 使用 Cloudflare 产生私密金钥和 CSR
  • 私密金钥类型:ECC
  • 主机名称:删掉泛域名,添加网站的完整域名
  • 有效期:默认的 15 年就行
Cloudflare 创建源站证书
Cloudflare 创建源站证书

点击创建后,会显示证书和私钥,我们需要复制到服务器里。将证书的内容粘贴进 /usr/lcoal/lsws/conf/cert/wordpress.crt,私钥内容粘贴进 /usr/lcoal/lsws/conf/cert/wordpress.pem,然后设置权限:

cd /usr/local/lsws/conf/cert
sudo chown lsadm:nobody wordpress.*
sudo chmod 640 wordpress.*

还需要在 Cloudflare 仪表板里配置 CDN 节点到源站之间的 SSL 方式。还是点击左侧工具栏的 SSL/TLS>概观,再点击右上角的 设定,将加密模式设置为 完整(严格),然后保存。

设置完整(严格)SSL
设置完整(严格)SSL

再回到 OpenLiteSpeed 仪表板,点击左侧的 虚拟主机,点击刚才创建的 WordPress 虚拟主机,再点击工具栏的 SSL,编辑 SSL 私钥和证书:

  • 私钥文件:conf/cert/wordpress.pem
  • 证书文件:conf/cert/wordpress.crt

保存后,就可以平滑重启了。

安装 WordPress

在 Cloudflare 的 DNS 记录里添加了你服务器的 A、AAAA 记录后(具体步骤略过,因本教程并不主要针对 Cloudflare),过几分钟就可以访问你的网站了(如果提示不安全,就手动加 https://),然后就会跳转到 WordPress 安装界面。点击下一步后,输入数据库信息、网站基本信息,即可安装完成。

如果打不开,且 Cloudflare 提示 5xx 错误,可能是系统防火墙或 VPS 网络安全组没设置好。你可以问下 AI 如何通过 firewall-cmd 新建一个区域来设置仅允许 Cloudflare 节点 IP 访问服务器 443 端口(TCP 和 UDP),VPS 网络安全组就自己去后台开端口。

WordPress LiteSpeed 插件

安装好 WordPress 后,会跳转到网站后台。点击左侧的 插件,可以将自带的两个未启用的插件移除,大概率用不上。然后点击 安装插件,搜索 LiteSpeed Cache,然后安装并启用。

安装好后,应该会让你选择一个预设,这里可以先选择 必备(最低等级的那个),然后点击左侧边栏的 缓存规则,再点击上面的 [6] 对象 选项卡,设置 Redis 对象缓存:

  • 对象缓存:开启
  • 方法:Redis
  • 主机:127.0.0.1
  • 端口:6379
LiteSpeed 插件设置 Redis 对象缓存
LiteSpeed 插件设置 Redis 对象缓存

保存后,应该会提示连接测试通过。这个插件还有很多好用的功能,可以去网上搜其它教程来设置插件别的内容,例如页面优化、对象(主要现在这个文章已经太长了,以后我也许会写新的文章介绍这个插件)。

之前设置过的 QUIC.cloud 的可信 IP 也和这个插件提供的一个云服务有关,可以帮助你优化页面 JS、CSS、图像等,个人觉得还是很好用的,而且对于 OpenLiteSpeed 服务器还有免费额度。

其它

基本安装内容就到此为止了,但要搞好一个 WordPress 站这样应该还不够,特别是 Cloudflare,还有一大堆要设置的。你可以参考我的其它教程来继续研究:

另外,OpenLiteSpeed 进程默认使用 unconfined_service_t SELinux 类型运行,意味着没有任何限制,如果对安全特别顾虑的需要调整下(我试了下,不简单)。

本文也许是和 LiteSpeed 有关的最长的中文教程了(虽然大部分内容和 LiteSpeed 无关),但感觉还是有很多东西没讲完,只能说要建好一个网站确实不简单,等以后补充吧。

参考资料