dede图片服务器如何配置与使用?

99ANYc3cd6
预计阅读时长 19 分钟
位置: 首页 DEDE建站 正文

DedeCMS 本身不提供独立的图片服务器管理后台,它主要通过修改配置和代码,将上传的图片资源(附件)分发到指定的服务器上。

核心原理

DedeCMS 的图片服务器方案主要有两种实现思路:

  1. 独立服务器 + 域名 (最常用、最推荐)

    • 原理:准备一台独立的服务器(可以是云服务器,如阿里云、腾讯云),专门用于存放图片,在这台服务器上搭建一个简单的 Web 服务(如 Nginx),并绑定一个独立的域名(如 img.yourdomain.com),然后修改 DedeCMS 的上传和显示逻辑,将图片上传到这台新服务器,并在前台页面中以新域名的形式进行引用。
    • 优点:真正实现了物理分离,可以为主服务器分担大量带宽和 I/O 压力,并且可以为图片服务器配置不同的缓存策略,性能提升非常明显。
    • 缺点:需要额外购买服务器和域名,配置相对复杂一些。
  2. CDN (Content Delivery Network) 加速

    • 原理:将 DedeCMS 主站上传的图片作为源站,然后接入 CDN 服务(如阿里云 CDN、腾讯云 CDN、Cloudflare 等),用户访问图片时,会从离他最近的 CDN 节点获取,而不是从你的主服务器。
    • 优点:全球加速,访问速度最快,能极大减轻源站(主服务器)的压力,服务商提供完善的控制台和管理功能。
    • 缺点:通常是付费服务(有免费额度),配置需要一定的网络知识。

下面,我们将重点讲解第一种方案(独立服务器 + 域名)的具体操作步骤,因为它更具通用性和代表性。


详细实施步骤(独立服务器 + 域名方案)

假设我们有以下信息:

  • 主站域名www.yourdomain.com
  • 图片服务器域名img.yourdomain.com
  • 主站服务器:IP A.A.A.A
  • 图片服务器:IP B.B.B.B

第一步:配置图片服务器 (B.B.B.B)

  1. 安装 Web 服务:在图片服务器上安装 Nginx 或 Apache,这里以 Nginx 为例。

    # CentOS/RHEL
    yum install nginx -y
    # Ubuntu/Debian
    apt-get install nginx -y
  2. 创建网站目录:创建一个用于存放图片的目录。

    mkdir -p /data/images
    # 设置目录权限,确保 Web 服务器用户有读写权限
    chown -R nginx:nginx /data/images
    chmod -R 755 /data/images
  3. 配置 Nginx:编辑 Nginx 配置文件,/etc/nginx/conf.d/img.yourdomain.com.conf

    server {
        listen       80;
        server_name  img.yourdomain.com;
        # 设置网站根目录
        root   /data/images;
        index  index.html index.htm;
        # 图片缓存策略,建议设置长缓存时间
        location ~* \.(jpg|jpeg|png|gif|bmp|swf)$ {
            expires      30d; # 缓存30天
            add_header   Cache-Control public;
        }
        # 其他文件类型(如JS、CSS)也可以设置缓存
        location ~* \.(js|css)$ {
            expires      7d;
            add_header   Cache-Control public;
        }
        # 记录访问日志
        access_log  /var/log/nginx/img.yourdomain.com.access.log;
        error_log   /var/log/nginx/img.yourdomain.com.error.log;
    }
  4. 启动并测试 Nginx

    nginx -t  # 检查配置文件语法
    systemctl start nginx  # 启动服务
    systemctl enable nginx # 设置开机自启

    直接在浏览器访问 http://img.yourdomain.com,应该能看到 Nginx 的欢迎页面或目录列表(如果目录为空)。注意:DNS 需要解析正确。

第二步:配置域名解析

在你的域名解析服务商(如阿里云、腾讯云DNSPod)后台,为 img.yourdomain.com 添加一个 A 记录,指向图片服务器的 IP 地址 B.B.B.B

第三步:修改 DedeCMS 主站配置 (A.A.A.A)

这是最关键的一步,需要修改 DedeCMS 的核心文件来实现上传和显示的分离。

  1. 修改 dede/config.php 文件

    找到 config.php 文件,修改以下配置项:

    // ... 其他配置 ...
    /**
     * 附件服务器配置
     * 如果配置了此项,则上传的附件会保存到该服务器
     * 格式: 'ftp://用户名:密码@IP地址:端口/网站目录/'
     * 注意:这里我们先用 FTP 方式来演示,因为它最通用。
     */
    $cfg_ftp_host = 'ftp://img.yourdomain.com'; // 图片服务器域名
    $cfg_ftp_port = 21; // FTP端口
    $cfg_ftp_user = 'your_ftp_user'; // 图片服务器上创建的FTP用户
    $cfg_ftp_pass = 'your_ftp_password'; // FTP密码
    $cfg_ftp_root = '/'; // FTP根目录,对应图片服务器的 /data/images
    /**
     * 附件目录配置
     * 上传的附件保存在哪个目录下
     */
    $cfg_medias_dir = '/uploads/allimg/'; // 保持默认即可
    // ... 其他配置 ...

    注意:你需要在图片服务器上为 Nginx 用户(如 nginx)创建一个 FTP 账户,并确保该账户有对 /data/images 目录的读写权限。

  2. 修改 /include/dedeproject.class.php 文件 (可选,用于直接上传)

    如果你的图片服务器支持 FTP,DedeCMS 版本较新,config.php 的配置可能已经足够,但如果遇到问题,可以手动修改此文件来确保上传逻辑正确,搜索 UploadFile 相关方法,检查是否使用了 $cfg_ftp_host 等配置。

  3. 修改前台模板文件,替换图片域名

    这是最直接的方法,适用于所有 DedeCMS 版本。

    • 找到你的前台模板文件(通常是 /templets/default/ 目录下的 .htm 文件)。
    • 使用 str_replace 函数或修改标签,将原来的图片路径(/uploads/...)替换为新的图片域名。

    示例: 在需要显示文章内容的地方,通常使用 {dede:field.body/} 标签,你可以创建一个自定义函数或使用插件来处理这个标签。

    方法A:直接修改模板(不推荐,内容多时麻烦)

    <!-- 原始写法 -->
    <img src="{dede:field.litpic/}" alt="{dede:field.title/}" />
    <!-- 修改后 -->
    <img src="http://img.yourdomain.com{dede:field.litpic/}" alt="{dede:field.title/}" />

    方法B:修改 arclist.lib.php 标签文件(推荐,一劳永逸)

    1. 打开 /include/taglib/arclist.lib.php 文件。

    2. 找到处理 litpic(缩略图)的代码段,通常在 GetArcList 函数内。

    3. 在返回 $litpic 之前,添加一行代码进行替换:

      // ... 原始代码 ...
      $litpic = $arc->Fields['litpic'];
      // 在这里添加替换逻辑
      if (strpos($litpic, '/uploads/') !== false) {
          $litpic = str_replace('/uploads/', 'http://img.yourdomain.com/uploads/', $litpic);
      }
      return $litpic;
    4. listimg.lib.php 做同样操作,因为列表页的缩略图也用到了这个逻辑。

    方法C:使用正则表达式全局替换(最彻底) 如果你的网站已经上线,内容很多,可以使用数据库工具或编写一个简单的 PHP 脚本,对 #@__uploads#@__addonarticle 等表中的 bodylitpic 等字段进行全局替换,将 /uploads/ 替换为 http://img.yourdomain.com/uploads/

第四步:测试

  1. 上传测试:登录 DedeCMS 后台,发布一篇新文章,上传几张图片,检查图片服务器的 /data/images/uploads/ 目录下是否成功生成了文件。
  2. 访问测试:在前台页面查看这篇文章,检查图片是否能正常显示,浏览器开发者工具中的网络请求,图片的 URL 应该是 http://img.yourdomain.com/... 的形式。

进阶方案:使用 Nginx 反向代理

如果你不想配置 FTP,并且图片服务器和主站服务器在同一内网,可以使用 Nginx 的 proxy_pass 功能。

  1. 图片服务器 Nginx 配置

    server {
        listen 192.168.1.100:8080; # 监听内网端口,不对外
        root /data/images;
    }
  2. 主站服务器 Nginx 配置

    location /uploads/ {
        # 将所有对 /uploads/ 的请求,反向代理到图片服务器
        proxy_pass http://192.168.1.100:8080/;
        # 可以设置一些代理头
        proxy_set_header Host $host;
    }

    这种方式更高效,但需要服务器在同一内网。

方案 优点 缺点 适用场景
独立服务器 + 域名 真正分离,性能提升明显,可控性强 需要额外成本和配置,运维稍复杂 中大型网站,图片站,对性能有较高要求的站点
CDN 加速 速度最快,全球覆盖,减轻源站压力 通常是付费服务,配置有门槛 访问用户遍布全球,追求极致加载速度的网站
Nginx 反向代理 配置简单,无需 FTP,内网传输快 服务器需在同一内网,灵活性稍差 多台服务器在同一内网的私有部署环境

对于大多数用户来说,“独立服务器 + 域名” 是最平衡、最实用的选择,请根据你的实际需求和资源选择合适的方案。

-- 展开阅读全文 --
头像
织梦备份的数据库文件
« 上一篇 04-05
织梦数据库文件存放在服务器哪个目录?
下一篇 » 04-05

相关文章

取消
微信二维码
支付宝二维码

目录[+]