WordPress 配置模板(安全/集群/调试/防火墙/HTTPS 兼容)

社区话题 wordpress开发 WordPress 配置模板(安全/集群/调试/防火墙/HTTPS 兼容)

  • 该话题包含 1 个回复、1 个参与人,并且最后由 追光3周 前 更新。
正在查看 1 条回复
  • 作者
    帖子
    • #1054

      追光
      管理员

      为wordpress重构为一个可复用、模块化、带详细注释的 WordPress 配置模板,方便直接复制使用、按需修改、易于管理。

      ✅ WordPress 配置模板(安全/集群/调试/防火墙/HTTPS 兼容)

      > ? 说明:本配置适用于 WordPress 高级部署场景,支持多站点集群、外部请求白名单、强制 HTTPS、调试日志、缓存优化等。
      > ?️ 安全提示:请在部署前替换所有 `YOUR_*` 占位符,并根据实际环境调整白名单、数据库、密钥等。

      ? `wp-config.php` 完整模板(可直接复制使用)

      <?php
      /* WordPress 配置文件 - 模块化安全模板
       * 适用于生产/开发环境,支持集群、HTTPS、防火墙、调试等
       * ✅ 使用前请替换所有 YOUR_* 占位符
       * ✅ 按模块注释修改,方便管理和协作
       */
      
      
      /**
       * ----------------------------------------------------------------
       * 【缓存设置】WP Rocket 或其他缓存插件启用
       * ----------------------------------------------------------------
       */
      
      define('WP_CACHE', true); // 由缓存插件自动添加,如 WP Rocket
      
      /**
       * ----------------------------------------------------------------
       * 文件系统写入方式设置 'direct',可以避免 WordPress 尝试 FTP 或 SSH
       * ----------------------------------------------------------------
       */
      define('FS_METHOD', 'direct'); // 直接写入文件系统(需确保目录权限正确)
      
      
      /**
       * ----------------------------------------------------------------
       * 【HTTPS 修正】当 WordPress 位于反向代理/负载均衡后时强制 HTTPS
       * 适用于 Cloudflare、Nginx、Caddy、AWS ALB 等场景
       * ----------------------------------------------------------------
       */
      
      $_SERVER['HTTPS'] = 'on';
      
      define('FORCE_SSL_LOGIN', true);  // 强制登录页 HTTPS
      define('FORCE_SSL_ADMIN', true);  // 强制后台 HTTPS
      
      /**
       * ----------------------------------------------------------------
       * WP防火墙开启,并设定白名单
       * ----------------------------------------------------------------
       */
      define('WP_HTTP_BLOCK_EXTERNAL', true); // 开启外部请求拦截
      
      // ✅ 替换或扩展以下白名单,按需添加你的服务域名/IP
      define('WP_ACCESSIBLE_HOSTS', implode(',', [
          // 本地及自身服务
          '127.0.0.1',
          'localhost',
          'YOUR_MAIN_DOMAIN.com',
          'dev.YOUR_MAIN_DOMAIN.com',
          'api.YOUR_MAIN_DOMAIN.com',
      
          // 第三方服务(AI、支付、社交登录等)
          'api.openai.com',
          'openrouter.ai',
          'api.pinecone.io',
          'api.weixin.qq.com',
          'graph.qq.com',
          'api.weibo.com',
          'openapi.alipay.com',
      
          // SEO & 搜索引擎
          'www.google.com',
          'www.bing.com',
          'data.zz.baidu.com',
          'ping.baidu.com',
          'www.google.com/ping',
          'www.bing.com/ping',
      
          // 工具与验证
          'ahrefs.com',
          'semrush.com',
          'majestic.com',
          'api.cloudflare.com',
          'challenges.cloudflare.com',
          'mirrors.tuna.tsinghua.edu.cn'
      ]));
      
      /**
       * ----------------------------------------------------------------
       / WordPress MySQL 设置
      ----------------------------------------------------------------
       */
      define('DB_NAME',     'YOUR_DB_NAME');        // 数据库名
      define('DB_USER',     'YOUR_DB_USER');        // 数据库用户名
      define('DB_PASSWORD', 'YOUR_DB_PASSWORD');    // 数据库密码
      define('DB_HOST',     'YOUR_DB_HOST');        // 数据库主机(可带端口,如 'localhost:3307')
      define('DB_CHARSET',  'utf8mb4');             // 字符集(推荐)
      define('DB_COLLATE',  '');                    // 排序规则,一般留空
      
      / 数据表前缀(增强安全性) */
      $table_prefix = 'wp_'; // 建议修改为随机前缀,如 'x7a_'
      
      /**
       * ----------------------------------------------------------------
       Authentication Unique Keys and Salts.
       * ----------------------------------------------------------------
       */
      define('AUTH_KEY',         'YOUR_AUTH_KEY');
      define('SECURE_AUTH_KEY',  'YOUR_SECURE_AUTH_KEY');
      define('LOGGED_IN_KEY',    'YOUR_LOGGED_IN_KEY');
      define('NONCE_KEY',        'YOUR_NONCE_KEY');
      define('AUTH_SALT',        'YOUR_AUTH_SALT');
      define('SECURE_AUTH_SALT', 'YOUR_SECURE_AUTH_SALT');
      define('LOGGED_IN_SALT',   'YOUR_LOGGED_IN_SALT');
      define('NONCE_SALT',       'YOUR_NONCE_SALT');
      
      /**
       * ----------------------------------------------------------------
      网站集群配置
       * ----------------------------------------------------------------
       */
      // define('MULTISITE', true);
      // define('SUBDOMAIN_INSTALL', true); // 子域名模式(或 false 为子目录)
      // define('DOMAIN_CURRENT_SITE', 'YOUR_MAIN_DOMAIN.com');
      // define('PATH_CURRENT_SITE', '/');
      // define('SITE_ID_CURRENT_SITE', 1);
      // define('BLOG_ID_CURRENT_SITE', 1);
      // define('BP_ROOT_BLOG', 1); // 仅在使用 BuddyPress 时需要
      
      // 启用 sunrise.php(高级多站点路由)
      // define('SUNRISE', 'on');
      
      /
       * -
       * 【调试模式】开发时启用,生产环境请关闭
       * -
       */
      define('WP_DEBUG', false);           // 开启调试
      define('WP_DEBUG_LOG', false);       // 记录到 /wp-content/debug.log
      define('WP_DEBUG_DISPLAY', false);   // 不在前端显示错误(安全!)
      @ini_set('display_errors', 0);       // 强制关闭 PHP 错误显示
      
      /
       * -
       * 【路径与启动】不要修改以下部分
       * -
       */
      if (!defined('ABSPATH')) {
          define('ABSPATH', __DIR__ . '/');
      }
      
      require_once ABSPATH . 'wp-settings.php';
      

      ? 模块功能详解(便于团队协作与维护)

      | 模块名称 | 功能说明
      | 缓存设置 | 启用 WP Rocket 或其他缓存插件的页面缓存功能。
      | 文件系统 | 避免 WordPress 在更新插件/主题时弹出 FTP 登录框,需确保目录权限为 `www-data` 可写。 |
      | HTTPS 修正 | 当 WordPress 位于反向代理后(如 Nginx、Cloudflare),强制识别 HTTPS 协议。
      | 防火墙白名单 | 限制 WordPress 插件对外发起 HTTP 请求,仅允许白名单内域名,防止 SSRF 攻击。
      | 数据库配置 | 连接 MySQL/MariaDB 的凭证,建议使用专用用户+复杂密码+非默认端口。
      | 安全密钥 | 用于加密用户 Cookie、CSRF Token 等,必须唯一且复杂,可在线生成。
      | 多站点集群 | 启用 WordPress Multisite,支持子域名或子目录模式,适合 SaaS 或多租户系统。
      | 调试模式 | 开发阶段记录错误日志,生产环境务必关闭 `WP_DEBUG_DISPLAY` 避免信息泄露。
      | 路径与启动 | WordPress 核心加载逻辑,勿修改。

      ✅ 使用建议

      1. 首次部署:
      - 替换所有 `YOUR_*` 占位符。
      - 从 [WordPress 官方密钥生成器](https://api.wordpress.org/secret-key/1.1/salt/) 获取新密钥。
      - 根据实际服务扩展 `WP_ACCESSIBLE_HOSTS` 白名单。

      2. 安全加固:
      - 数据库用户权限最小化。
      - 文件权限:`wp-config.php` 设为 `600` 或 `640`。
      - 禁用文件编辑:`define('DISALLOW_FILE_EDIT', true);`

      3. 版本控制:
      - 将此文件纳入 Git,但不要提交真实密钥或数据库密码。
      - 使用 `.env` + `wp-config-local.php` 分离敏感配置(需额外加载逻辑)。

      4. 多环境支持:
      - 可通过 `$_SERVER['HTTP_HOST']` 或 `WP_ENV` 常量区分 dev/staging/prod,动态加载不同配置。

      ? 进阶:环境分离示例(可选)

      // 在 wp-config.php 顶部添加:

      if (file_exists(__DIR__ . '/wp-config-local.php')) {
          include __DIR__ . '/wp-config-local.php';
          return; // 跳过后续默认配置
      }
      // ... 以下是默认/生产配置

      然后创建 `wp-config-local.php` 用于本地/开发环境,不纳入版本控制。

      ? 总结这个模板:

      - ✅ 模块化:每个功能独立注释,方便按需启用/禁用。
      - ✅ 可复用:适用于大多数 WordPress 高级部署场景。
      - ✅ 易管理:团队协作时,新人也能快速理解配置结构。

      如需我帮你生成真实密钥、环境分离脚本、或Docker 部署版配置,欢迎继续提问! ?

    • #1062

      追光
      管理员

      ✅ 单站点环境配置说明(极简补充)

      只需从上述模板中删除或注释掉「多站点集群配置」模块即可,WordPress 会自动以单站点模式运行。

      ? 为什么?

      WordPress 的默认运行模式就是单站点(Single Site)。
      只有当你主动定义了以下常量,才会进入多站点(Multisite)模式:

      define('MULTISITE', true);

      所以,只要不定义 `MULTISITE`,或将其设为 `false`,或直接删除相关配置块 —— 就是标准单站点环境 ✅

      ? 推荐操作:注释或删除以下部分

      在你的配置文件中,找到并注释或删除这一整块:

      
      /*
       * 【多站点集群配置】如需启用 WordPress Multisite
       * -
       */
      // define('MULTISITE', true);
      // define('SUBDOMAIN_INSTALL', true); // 子域名模式(或 false 为子目录)
      // define('DOMAIN_CURRENT_SITE', 'YOUR_MAIN_DOMAIN.com');
      // define('PATH_CURRENT_SITE', '/');
      // define('SITE_ID_CURRENT_SITE', 1);
      // define('BLOG_ID_CURRENT_SITE', 1);
      // define('BP_ROOT_BLOG', 1); // 仅在使用 BuddyPress 时需要
      
      // 启用 sunrise.php(高级多站点路由)
      // define('SUNRISE', 'on');

      ✅ 删除或保持注释状态 = 单站点模式
      ⚠️ 只要 `define(‘MULTISITE’, true);` 被执行,就会强制进入多站点

      ? 如何验证当前是单站点?

      在 WordPress 后台:

      – 如果你看不到「我的站点」→「站点管理」菜单
      – 如果你访问 `/wp-admin/network/` 会提示 “Multisite is not enabled”
      – 说明你正在运行单站点模式 —— 一切正常!

      ? 额外建议(单站点专用优化)

      你还可以在单站点中添加以下安全/性能配置(可选):

      
      /* 禁用主题/插件编辑器(安全) */
      define('DISALLOW_FILE_EDIT', true);
      
      /* 禁用自动更新核心(生产环境推荐手动控制) */
      define('WP_AUTO_UPDATE_CORE', false);
      
      /* 增加内存限制(大型插件/主题需要) */
      define('WP_MEMORY_LIMIT', '256M');

      ✅ 最终结论

      ✔️单站点 = 删除/注释多站点配置块
      ✔️无需额外操作,WordPress 默认即单站点
      ✔️保留其他模块(HTTPS、防火墙、调试等)完全兼容单站点

正在查看 1 条回复
  • 在下方一键注册,登录后就可以回复啦。