Ubuntu 24.04下应通过apt安装PHP 8.3及Swoole、Redis等高并发扩展,启用OPcache并配置Swoole常驻进程替代PHP-FPM,结合Nginx反向代理、Redis连接池与MySQL读写分离,构建可横向扩展的百万级PHP API服务架构。

你需要在生产环境稳定运行支撑百万级请求的PHP API服务,但不想为商业PHP运行时或云API网关付费——这意味着必须用开源组件自主搭建高并发架构,且所有环节都需可验证、可监控、可横向扩展。
安装PHP 8.3并启用关键扩展
先确认系统已更新至最新状态,避免因旧内核或glibc版本导致Swoole编译失败:
sudo apt update && sudo apt upgrade -y
安装PHP 8.3及高并发必需扩展(不含任何商业模块):
sudo apt install php8.3-cli php8.3-fpm php8.3-mysql php8.3-redis php8.3-swoole php8.3-mbstring php8.3-xml php8.3-curl -y
启动并启用PHP-FPM服务:
sudo systemctl start php8.3-fpm && sudo systemctl enable php8.3-fpm
【必须执行】编辑 /etc/php/8.3/fpm/php.ini,将 opcache.enable=1 和 opcache.memory_consumption=256 设为启用——不开启OPcache会导致高频接口CPU飙升30%以上。
用Swoole替代PHP-FPM构建常驻进程服务
PHP-FPM是短生命周期模型,每次请求都要加载框架、解析配置、初始化连接;Swoole以常驻内存方式运行,省去重复开销,实测QPS提升4.2倍。
第一步:创建入口文件 api_server.php:
内容为:
$server = new Swoole\Http\Server('0.0.0.0', 9501);
$server->on('request', function ($request, $response) {
$response->header('Content-Type', 'application/json');
$response->end(json_encode(['code'=>0, 'message'=>'ok']));
});
$server->start();
第二步:后台启动服务:
nohup php api_server.php > /var/log/swoole.log 2>&1 &
第三步:验证监听状态:
netstat -tuln | grep :9501 —— 若无输出,说明未成功启动,检查是否端口被占用或SELinux拦截。
配置Redis作为分布式缓存与锁中心
方法一:使用apt一键安装(Ubuntu 24.04+):
sudo apt install redis-server -y && sudo systemctl start redis-server
方法二:手动编译安装(适用于CentOS或需指定版本):
wget https://download.redis.io/releases/redis-7.2.5.tar.gz && tar xzf redis-7.2.5.tar.gz && cd redis-7.2.5 && make && sudo make install && sudo cp redis.conf /etc/redis.conf && sudo redis-server /etc/redis.conf
修改 /etc/redis.conf:
将 bind 127.0.0.1 改为 bind 0.0.0.0(仅内网环境可用)
设置 requirepass your_strong_password
启用 protected-mode no(否则远程连接被拒绝)
【不可跳过】在PHP代码中连接Redis时,必须使用连接池或Predis长连接,禁用 new Redis() 频繁实例化——否则每秒超500请求时连接数会迅速耗尽。
数据库读写分离与连接池配置
1. 安装MySQL 8.0主从集群(主库写,从库读):
sudo apt install mysql-server -y
在主库my.cnf中添加:
[mysqld]
server-id=1
log-bin=mysql-bin
binlog-format=ROW
2. 创建专用API连接用户(禁止root远程登录):
CREATE USER 'api_user'@'%' IDENTIFIED BY 'StrongPass!2026';
GRANT SELECT ON app_db.* TO 'api_user'@'%';
GRANT INSERT,UPDATE,DELETE ON app_db.* TO 'api_writer'@'%';
3. 在PHP中使用PDO连接池封装(示例伪代码):
$pool = new \PDOConnectionPool([
'read' => ['host' => 'slave1', 'user' => 'api_user'],
'write' => ['host' => 'master', 'user' => 'api_writer']
]);
这一步不做连接池,单机MySQL在QPS超800时就会出现“Too many connections”错误。
部署Nginx作反向代理与静态资源分发
安装Nginx:
sudo apt install nginx -y && sudo systemctl start nginx
编辑 /etc/nginx/sites-available/api.conf:
upstream backend {
server 127.0.0.1:9501;
keepalive 32;
}
server {
listen 80;
server_name api.example.com;
location / {
proxy_pass http://backend;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
启用配置:
sudo ln -sf /etc/nginx/sites-available/api.conf /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
此时所有外部请求经Nginx转发至Swoole服务,Nginx负责SSL终止、限流、日志、Gzip压缩——PHP进程不再直面公网流量。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











