香港服务器访问速度慢?5 个常见原因与解决方案

摘要:用 Docker 部署 WordPress 是目前最推荐的方式,环境隔离、迁移方便、一键重建。本文基于香港云服务器,从零开始完整演示:安装 Docker → 编写 docker-compose.yml → 配置 Nginx 反向代理 → 申请免费 SSL 证书,全程约 30 分钟完成部署。适合有基础 Linux 操作经验的用户。

前置条件与环境说明

开始前请确认以下条件已满足:

条件要求说明
服务器系统Ubuntu 20.04 / 22.04(推荐)本文所有命令基于 Ubuntu,CentOS 安装命令略有不同
服务器配置最低 1核2G,推荐 2核2G+WordPress + MySQL + Nginx 最低内存需求约 512MB
域名已解析到服务器 IP申请 SSL 证书必须先完成域名解析,TTL 生效需等待几分钟
端口80 和 443 已在安全组放行云平台控制面板中确认入方向规则
root 权限使用 root 或 sudo 用户操作安装 Docker 需要管理员权限
💡 架构说明:本教程部署的架构为 Nginx(宿主机)→ WordPress 容器 → MySQL 容器。Nginx 运行在宿主机上负责 SSL 和反向代理,WordPress 和 MySQL 运行在 Docker 容器内部,通过内部网络通信。

1 安装 Docker 和 Docker Compose

# 更新系统包
apt update && apt upgrade -y

# 安装依赖
apt install -y ca-certificates curl gnupg lsb-release

# 添加 Docker 官方 GPG 密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

# 添加 Docker 软件源
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] \
https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" \
| tee /etc/apt/sources.list.d/docker.list > /dev/null

# 安装 Docker Engine
apt update && apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

# 验证安装成功
docker --version
docker compose version
✅ 看到版本号输出即安装成功。如果网络慢,可以先配置 Docker 国内镜像加速(见 FAQ Q1)。

2 创建项目目录结构

# 创建项目根目录
mkdir -p /opt/wordpress && cd /opt/wordpress

# 创建子目录
mkdir -p nginx/conf.d
mkdir -p certbot/conf
mkdir -p certbot/www
mkdir -p mysql/data
mkdir -p wordpress/data

# 查看目录结构
tree /opt/wordpress

目录结构说明:

目录用途
nginx/conf.d/Nginx 虚拟主机配置文件
certbot/conf/SSL 证书存储目录
certbot/www/Let's Encrypt 验证文件临时目录
mysql/data/MySQL 数据持久化目录
wordpress/data/WordPress 文件持久化目录(主题/插件/上传)

3 编写 docker-compose.yml

# 创建并编辑 docker-compose.yml
nano /opt/wordpress/docker-compose.yml

粘贴以下内容(将 your_db_password 替换为强密码):

version: '3.8'

services:

  mysql:
    image: mysql:8.0
    container_name: wp_mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: your_root_password
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wpuser
      MYSQL_PASSWORD: your_db_password
    volumes:
      - ./mysql/data:/var/lib/mysql
    networks:
      - wp_network

  wordpress:
    image: wordpress:php8.1-fpm
    container_name: wp_app
    restart: always
    depends_on:
      - mysql
    environment:
      WORDPRESS_DB_HOST: mysql:3306
      WORDPRESS_DB_NAME: wordpress
      WORDPRESS_DB_USER: wpuser
      WORDPRESS_DB_PASSWORD: your_db_password
      WORDPRESS_TABLE_PREFIX: wp_
    volumes:
      - ./wordpress/data:/var/www/html
    networks:
      - wp_network

networks:
  wp_network:
    driver: bridge
⚠️ 安全提示:your_root_passwordyour_db_password 替换为至少 16 位包含大小写字母、数字和特殊字符的强密码,不要使用示例中的默认值。

4 配置 Nginx 反向代理

首先安装宿主机上的 Nginx:

apt install -y nginx
systemctl enable --now nginx

创建 WordPress 站点配置文件(将 yourdomain.com 替换为你的真实域名):

nano /etc/nginx/sites-available/wordpress

粘贴以下配置:

server {
    listen 80;
    server_name yourdomain.com www.yourdomain.com;

    # Let's Encrypt 验证路径
    location /.well-known/acme-challenge/ {
        root /opt/wordpress/certbot/www;
    }

    # 其他请求暂时直接代理(SSL 配置完成后改为 301 跳转)
    location / {
        root /opt/wordpress/wordpress/data;
        index index.php;

        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;
        }
    }
}
💡 我们先用 HTTP 配置完成 SSL 证书申请,申请成功后再升级为 HTTPS 配置。
# 启用站点配置
ln -s /etc/nginx/sites-available/wordpress /etc/nginx/sites-enabled/

# 测试配置语法
nginx -t

# 重载 Nginx
systemctl reload nginx

5 启动容器并验证

# 进入项目目录
cd /opt/wordpress

# 后台启动所有容器
docker compose up -d

# 查看容器运行状态
docker compose ps

# 查看启动日志(如有报错)
docker compose logs

正常输出应类似:

NAME         STATUS          PORTS
wp_mysql     Up 30 seconds   3306/tcp
wp_app       Up 28 seconds   9000/tcp
# 验证 MySQL 连接正常
docker exec -it wp_mysql mysql -u wpuser -p wordpress
# 输入密码后看到 mysql> 提示符即表示正常,输入 exit 退出

# 验证 WordPress 文件已生成
ls /opt/wordpress/wordpress/data/
# 应看到 wp-admin、wp-content、wp-config.php 等文件
✅ 两个容器状态均为 Up 且 WordPress 目录有文件,说明容器启动成功。

6 申请 SSL 证书(Let's Encrypt)

# 安装 Certbot
apt install -y certbot python3-certbot-nginx

# 申请证书(替换为你的真实域名和邮箱)
certbot --nginx -d yourdomain.com -d www.yourdomain.com \
  --email admin@yourdomain.com \
  --agree-tos --non-interactive

申请成功后,更新 Nginx 配置为完整的 HTTPS 版本:

nano /etc/nginx/sites-available/wordpress

替换为以下完整配置:

server {
    listen 80;
    server_name yourdomain.com www.yourdomain.com;
    # HTTP 强制跳转 HTTPS
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    server_name yourdomain.com www.yourdomain.com;

    ssl_certificate     /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
    ssl_protocols       TLSv1.2 TLSv1.3;
    ssl_ciphers         HIGH:!aNULL:!MD5;

    root /opt/wordpress/wordpress/data;
    index index.php index.html;

    client_max_body_size 64M;

    # Gzip 压缩
    gzip on;
    gzip_types text/plain text/css application/json application/javascript text/xml;

    # 静态文件缓存
    location ~* \.(jpg|jpeg|png|gif|ico|webp|css|js|woff2)$ {
        expires 30d;
        add_header Cache-Control "public, no-transform";
    }

    # WordPress 固定链接支持
    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    # PHP 请求转发到 WordPress 容器
    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;
        fastcgi_param  HTTPS on;
        fastcgi_read_timeout 300;
    }

    # 禁止访问隐藏文件
    location ~ /\. {
        deny all;
    }
}
# 让 WordPress 容器监听宿主机 9000 端口
# 修改 docker-compose.yml,在 wordpress 服务下添加 ports 映射
nano /opt/wordpress/docker-compose.yml

wordpress 服务中添加端口映射:

  wordpress:
    ...
    ports:
      - "127.0.0.1:9000:9000"   # 只监听本地,不对外暴露
    ...
# 重启容器使端口配置生效
cd /opt/wordpress
docker compose down && docker compose up -d

# 测试 Nginx 配置并重载
nginx -t && systemctl reload nginx

# 设置证书自动续期(Certbot 已自动添加 cron,手动验证一次)
certbot renew --dry-run
证书有效期:Let's Encrypt 证书有效期 90 天,Certbot 会自动在到期前 30 天续期,无需手动操作。

7 完成 WordPress 初始化设置

在浏览器访问 https://yourdomain.com,你会看到 WordPress 安装向导。按照以下步骤操作:

  1. 选择语言(选择「简体中文」)
  2. 填写站点标题、管理员用户名、密码和邮箱
  3. 点击「安装 WordPress」
  4. 安装完成后登录后台:https://yourdomain.com/wp-admin

安装后建议立即完成以下配置:

配置项操作路径推荐设置
固定链接格式设置 → 固定链接选择「文章名」(对 SEO 友好)
时区设置 → 常规设置为 UTC+8(上海)
关闭文件编辑wp-config.php添加 define('DISALLOW_FILE_EDIT', true);
安装缓存插件插件 → 安装插件推荐 W3 Total Cache 或 WP Super Cache
安全插件插件 → 安装插件推荐 Wordfence Security

日常维护命令速查

操作命令
查看容器状态docker compose ps
查看容器日志docker compose logs -f wordpress
重启所有容器docker compose restart
停止所有容器docker compose down
更新 WordPress 镜像docker compose pull && docker compose up -d
备份数据库docker exec wp_mysql mysqldump -u wpuser -p wordpress > backup.sql
还原数据库docker exec -i wp_mysql mysql -u wpuser -p wordpress < backup.sql
进入 WordPress 容器docker exec -it wp_app bash
进入 MySQL 容器docker exec -it wp_mysql mysql -u wpuser -p
查看磁盘占用docker system df
清理无用镜像docker system prune -f

常见问题解答(FAQ)

Q1:香港服务器拉取 Docker 镜像太慢,怎么配置加速?

香港服务器可以直接访问 Docker Hub,速度通常正常。如遇到慢的情况,可配置国内镜像源:编辑或创建 /etc/docker/daemon.json,添加 {"registry-mirrors": ["https://mirror.ccs.tencentyun.com"]},然后执行 systemctl restart docker

Q2:容器启动后访问域名提示 502 Bad Gateway,怎么排查?

502 表示 Nginx 无法连接到 WordPress 容器的 PHP-FPM。排查步骤:首先确认 WordPress 容器正在运行(docker compose ps);检查端口映射是否正确(docker compose port wordpress 9000);查看 Nginx 错误日志(tail -f /var/log/nginx/error.log);确认 Nginx 配置中的 fastcgi_pass 地址与容器端口一致。

Q3:WordPress 上传文件提示超过大小限制,怎么修改?

需要同时修改两处:Nginx 配置中的 client_max_body_size(已设为 64M),以及 PHP 配置中的 upload_max_filesizepost_max_size。在 WordPress 容器内执行:docker exec -it wp_app bash,编辑 /usr/local/etc/php/php.ini,修改后重启容器。

Q4:如何迁移这套 Docker WordPress 到新服务器?

迁移步骤:在旧服务器备份数据库(mysqldump)和 WordPress 文件目录(tar -czf wp_backup.tar.gz /opt/wordpress/wordpress/data);将备份文件传到新服务器(scp);在新服务器按本教程重新部署,启动容器后还原数据库和文件;更新域名解析到新 IP,重新申请 SSL 证书。整个过程停机时间通常在 15 分钟以内。

Q5:后浪云哪款服务器适合运行这套 WordPress Docker 环境?

个人博客或小型网站选择香港云服务器 2核2G(约 80 元/月)完全够用;中型电商或流量较高的内容站建议 4核4G;如需多个 WordPress 站点并行运行,建议 4核8G 或以上配置。所有套餐均接入 CN2 GIA 优质线路,3 天无理由退款。

THE END