You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP7.0+Apache2.4.18+Ubuntu16.04环境适配方案技术问询

适配Ubuntu 16.04 + PHP7.0-FPM + Apache2.4.18的WordPress缓存全栈配置

我刚帮客户搞定过几乎一模一样的环境部署,那些针对PHP5.x、Apache2.3或Ubuntu14.04的老文档真的坑人——PHP7.0和Apache2.4.18在FastCGI联动、扩展兼容上有不少细节变化,直接套用旧方案要么报错要么完全不生效。下面是我亲测可行的完整步骤,每一步都针对你的环境做了适配:

一、先搞定Apache2与PHP7.0-FPM的正确联动

这是很多旧方案失效的核心,Apache2.4.18对FastCGI的配置逻辑和旧版本不一样:

  • 启用必需的Apache模块:
    sudo a2enmod proxy proxy_fcgi setenvif
    sudo a2enconf php7.0-fpm
    
  • 检查并更新WordPress站点的虚拟主机配置,替换掉旧的mod_php规则,确保PHP请求正确转发到FPM:
    <FilesMatch \.php$>
        SetHandler "proxy:unix:/run/php/php7.0-fpm.sock|fcgi://localhost/"
    </FilesMatch>
    
  • 重启服务让配置生效:
    sudo systemctl restart apache2 php7.0-fpm
    

二、Redis配置(数据库查询缓存+对象缓存)

PHP7.0不能用旧的php5-redis包,必须用适配的版本:

  1. 安装Redis服务器和PHP7.0兼容的Redis扩展:
    sudo apt-get install redis-server php7.0-redis
    
  2. 配置WordPress对象缓存:
    • 获取兼容PHP7.0的Redis对象缓存核心文件(对应Redis Cache插件2.0.x版本分支),上传到/var/www/html/wp-content/目录下,命名为object-cache.php。
    • 编辑wp-config.php添加Redis配置:
      define('WP_REDIS_HOST', '127.0.0.1');
      define('WP_REDIS_PORT', 6379);
      define('WP_REDIS_DATABASE', 0); // 给WordPress单独分配一个Redis数据库,避免和其他应用冲突
      define('WP_CACHE', true);
      
  3. 数据库查询缓存优化:
    推荐使用Redis Cache插件(选2.0.x版本,兼容PHP7.0)的查询缓存功能,它会自动把WordPress的重复MySQL查询缓存到Redis里,替代已经废弃的MySQL查询缓存。

三、Memcached后端加速(用于PHP会话存储)

注意:PHP7.0已经废弃了旧的memcache扩展,必须用memcached扩展:

  1. 安装Memcached服务器和PHP7.0兼容的扩展:
    sudo apt-get install memcached php7.0-memcached
    
  2. 配置PHP-FPM使用Memcached存储会话:
    • 编辑/etc/php/7.0/fpm/php.ini,修改以下参数:
      session.save_handler = memcached
      session.save_path = "127.0.0.1:11211"
      
    • 重启PHP-FPM生效:
      sudo systemctl restart php7.0-fpm
      
    (如果已经用Redis做对象缓存,建议只把Memcached用于会话存储,避免两种缓存系统冲突)

四、Varnish 4.x反向代理配置(适配Apache2.4.18)

Ubuntu16.04默认的Varnish是4.1版本,刚好适配你的环境:

  1. 安装Varnish:
    sudo apt-get install varnish
    
  2. 调整端口,让Varnish监听80端口,Apache监听8080端口:
    • 编辑/etc/default/varnish,修改DAEMON_OPTS里的监听端口为80:
      DAEMON_OPTS="-a :80 \
                   -T localhost:6082 \
                   -f /etc/varnish/default.vcl \
                   -S /etc/varnish/secret \
                   -s malloc,256m"
      
    • 编辑/etc/apache2/ports.conf,把Listen 80改成Listen 8080,同时修改WordPress站点的虚拟主机配置,把<VirtualHost *:80>改成<VirtualHost *:8080>。
  3. 配置Varnish的default.vcl,适配WordPress的缓存规则:
    backend default {
        .host = "127.0.0.1";
        .port = "8080";
    }
    
    sub vcl_recv {
        # 跳过WordPress后台和登录页面的缓存
        if (req.url ~ "^/wp-admin/" || req.url ~ "^/wp-login.php") {
            return (pass);
        }
        # 缓存静态资源(图片、CSS、JS等)
        if (req.url ~ "\.(png|gif|jpg|jpeg|css|js|ico|svg)$") {
            set req.ttl = 1d;
            return (hash);
        }
        # 清理不必要的Cookie,避免缓存失效
        if (req.http.Cookie) {
            set req.http.Cookie = ";" + req.http.Cookie;
            set req.http.Cookie = regsuball(req.http.Cookie, "; +", ";");
            # 只保留WordPress必需的Cookie
            set req.http.Cookie = regsuball(req.http.Cookie, ";(wp_[a-f0-9]+|wordpress_logged_in_[a-f0-9]+|comment_author_[a-f0-9]+)", "; \1");
            set req.http.Cookie = regsuball(req.http.Cookie, ";[^ ][^;]*", "");
            set req.http.Cookie = regsuball(req.http.Cookie, "^[; ]+|[; ]+$", "");
            if (req.http.Cookie == "") {
                unset req.http.Cookie;
            }
        }
    }
    
    sub vcl_backend_response {
        # 给静态资源设置长缓存时间
        if (bereq.url ~ "\.(png|gif|jpg|jpeg|css|js|ico|svg)$") {
            set beresp.ttl = 1d;
        }
        # 后台和登录页面不缓存
        if (bereq.url ~ "^/wp-admin/" || bereq.url ~ "^/wp-login.php") {
            set beresp.ttl = 0s;
            return (deliver);
        }
    }
    
  4. 重启所有服务让配置生效:
    sudo systemctl restart apache2 varnish
    

五、验证配置是否生效

  • Redis缓存:执行redis-cli info stats,查看keyspace_hits和keyspace_misses数值,访问WordPress页面后这两个数值应该会变化,说明缓存正在工作。
  • Memcached:执行echo "stats" | nc 127.0.0.1 11211,查看curr_items等数值,登录WordPress后数值应该增加,说明会话存储正常。
  • Varnish:执行curl -I http://你的域名,查看响应头里的X-Varnish和Age字段,如果Age大于0,说明静态内容已经被Varnish缓存。

内容的提问来源于stack exchange,提问作者Arpita Singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:14:59