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.conf

2. 安装 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-opcache

3. 修复 php 命令

ln -sf /usr/bin/php-cli /usr/bin/php

4. 配置 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
EOF

5. 配置 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;
}
EOF

6. 创建站点(以端口 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;
}
EOF

7. 设置权限并启动

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 enable

8. 验证

netstat -tlnp | grep -E ':(88|9000)\s'

二、安装 Typecho

  1. 解压 Typecho 安装包,将所有文件放入 /home/www/blog
  2. 访问 http://路由器IP:88/install.php
  3. 数据库选择 SQLite,路径填写:

    /home/www/blog/usr/db/typecho.db
  4. 按提示完成安装

三、常用命令速查

操作NginxPHP-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_nameroot 即可。

2. Lucky 反代配置

为每个域名添加一条反代规则(必须开启「传递 Host 头」):

域名监听端口目标地址
a.yourdomain.com8443127.0.0.1:88
b.yourdomain.com8443127.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.confpm.max_children = 3⭐最高
OPcache/etc/php.inimemory_consumption=32
静态文件缓存Nginx server 块内expires 7d
TCP 模式(防权限问题)/etc/php8-fpm.d/www.conflisten = 127.0.0.1:9000
💡 核心提醒:路由器资源有限,pm.max_children = 3 是最关键的优化项,务必优先配置。

七、故障排查

问题检查命令常见原因
88端口无监听netstat -tlnp \| grep 88Nginx未启动或配置错误
9000端口无监听netstat -tlnp \| grep 9000PHP-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 =(空值)

添加新评论