ImmortalWrt23.05 - Nginx+PHP8+Typecho
环境:ARMv8 / aarch64_cortex-a53 / 1G内存 / ImmortalWrt 23.05.7
目录
- [[#一、快速安装(一键执行)]]
- [[#二、安装 Typecho]]
- [[#三、常用命令速查]]
- [[#四、多站点 + Lucky 反代方案]]
- [[#五、完整卸载(无残留)]]
- [[#六、优化要点汇总]]
- [[#七、故障排查]]
一、快速安装(一键执行)
以下代码块可直接逐条复制执行,已按顺序排列。
1. 安装基础环境
opkg update && opkg install nginx
cp /etc/nginx/uci.conf.template /etc/nginx/nginx.conf2. 安装 PHP8 及扩展
opkg install php8 php8-cli php8-fpm \
php8-mod-pdo php8-mod-pdo-sqlite \
php8-mod-mbstring php8-mod-curl \
php8-mod-session php8-mod-xml php8-mod-zip \
php8-mod-ctype php8-mod-tokenizer php8-mod-opcache3. 修复 php 命令
ln -sf /usr/bin/php-cli /usr/bin/php4. 配置 PHP(关键修复)
# 修复 doc_root(必须)
sed -i 's|^doc_root = .*|doc_root =|' /etc/php.ini
# 修复配置软链
ln -sf /etc/php8-fpm.conf /etc/php-fpm.conf
# 改用 TCP 模式(避免 socket 权限问题)
sed -i 's|listen = /var/run/php8-fpm.sock|listen = 127.0.0.1:9000|' /etc/php8-fpm.d/www.conf# 限制进程数(1G内存/两核推荐)
cat >> /etc/php8-fpm.d/www.conf << 'EOF'
; 资源限制优化
pm = dynamic
pm.max_children = 3
pm.start_servers = 1
pm.min_spare_servers = 1
pm.max_spare_servers = 2
EOF# 开启 OPcache
cat >> /etc/php.ini << 'EOF'
; OPcache 优化
opcache.enable=1
opcache.memory_consumption=32
opcache.max_accelerated_files=500
EOF5. 配置 Nginx
# 创建 PHP 公共处理配置
cat > /etc/nginx/php_fastcgi.conf << 'EOF'
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
location ~ /\.ht {
deny all;
}
EOF6. 创建站点(以端口 88 为例)
# 创建网站目录
mkdir -p /home/www/blog# 生成站点配置
cat > /etc/nginx/conf.d/blog.conf << 'EOF'
server {
listen 88;
server_name _;
root /home/www/blog;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$args;
}
# 静态文件缓存
location ~* \.(jpg|jpeg|png|gif|css|ico|woff)$ {
expires 3d;
access_log off;
}
include php_fastcgi.conf;
}
EOF7. 设置权限并启动
chown -R nobody:nogroup /home/www/blog
chmod 755 /home/www/blog
# 启动服务
/etc/init.d/php8-fpm start
nginx
# 设置开机自启
/etc/init.d/php8-fpm enable
/etc/init.d/nginx enable8. 验证
netstat -tlnp | grep -E ':(88|9000)\s'二、安装 Typecho
- 解压 Typecho 安装包,将所有文件放入
/home/www/blog - 访问
http://路由器IP:88/install.php 数据库选择 SQLite,路径填写:
/home/www/blog/usr/db/typecho.db- 按提示完成安装
三、常用命令速查
| 操作 | Nginx | PHP-FPM |
|---|---|---|
| 启动 | nginx | /etc/init.d/php8-fpm start |
| 重启 | service nginx restart | /etc/init.d/php8-fpm restart |
| 重载配置 | service nginx reload | — |
| 停止 | service nginx stop | /etc/init.d/php8-fpm stop |
| 测试配置 | nginx -t | — |
| 开机自启 | /etc/init.d/nginx enable | /etc/init.d/php8-fpm enable |
| 关闭自启 | /etc/init.d/nginx disable | /etc/init.d/php8-fpm disable |
四、多站点 + Lucky 反代方案
场景
80/443 端口被占用,通过 Lucky 反代 + Nginx 多站点实现多域名访问。
架构
外网 → Lucky (8443) → Nginx (88) → 根据 server_name 分发站点1. Nginx 多站点配置模板
# /etc/nginx/conf.d/site-001.conf
server {
listen 88;
server_name a.yourdomain.com;
root /home/www/site001;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$args;
}
include php_fastcgi.conf;
}多个站点依此类推,分别修改 server_name 和 root 即可。
2. Lucky 反代配置
为每个域名添加一条反代规则(必须开启「传递 Host 头」):
| 域名 | 监听端口 | 目标地址 |
|---|---|---|
| a.yourdomain.com | 8443 | 127.0.0.1:88 |
| b.yourdomain.com | 8443 | 127.0.0.1:88 |
五、完整卸载(无残留)
# 停止并禁用服务
/etc/init.d/nginx stop && /etc/init.d/nginx disable
/etc/init.d/php8-fpm stop && /etc/init.d/php8-fpm disable
# 卸载软件包
opkg remove --force-removal-of-dependent-packages \
nginx nginx-ssl nginx-util \
php8 php8-cli php8-fpm \
php8-mod-pdo php8-mod-pdo-sqlite \
php8-mod-mbstring php8-mod-curl \
php8-mod-session php8-mod-xml php8-mod-zip \
php8-mod-ctype php8-mod-tokenizer php8-mod-opcache
# 删除配置文件
rm -rf /etc/nginx /etc/php* /usr/bin/php* /var/run/php8-fpm.sock /tmp/log/php8-fpm.log
# 验证
opkg list-installed | grep -E 'nginx|php' || echo "已清理干净"六、优化要点汇总
| 优化项 | 配置位置 | 推荐值 | 优先级 |
|---|---|---|---|
| PHP-FPM 进程数 | /etc/php8-fpm.d/www.conf | pm.max_children = 3 | ⭐最高 |
| OPcache | /etc/php.ini | memory_consumption=32 | 高 |
| 静态文件缓存 | Nginx server 块内 | expires 7d | 中 |
| TCP 模式(防权限问题) | /etc/php8-fpm.d/www.conf | listen = 127.0.0.1:9000 | 中 |
💡 核心提醒:路由器资源有限,pm.max_children = 3 是最关键的优化项,务必优先配置。七、故障排查
| 问题 | 检查命令 | 常见原因 |
|---|---|---|
| 88端口无监听 | netstat -tlnp \| grep 88 | Nginx未启动或配置错误 |
| 9000端口无监听 | netstat -tlnp \| grep 9000 | PHP-FPM未启动 |
| PHP文件显示源码 | — | php_fastcgi.conf 未被 include |
| SQLite无法写入 | ls -la /home/www/blog/usr | 目录权限不是 nobody:nogroup |
| doc_root 错误 | grep doc_root /etc/php.ini | 应设为 doc_root =(空值) |