华为云ECS云服务器部署织梦CMS:Nginx伪静态与目录权限一键脚本全攻略

举报
yd_261335113 发表于 2026/06/21 21:43:39 2026/06/21
【摘要】 前言:为什么选择华为云ECS部署织梦CMS织梦CMS(DedeCMS)作为国内最流行的PHP开源内容管理系统之一,凭借其灵活的模板机制、丰富的插件生态和较低的入门门槛,在中小企业网站、个人博客、资讯门户等领域拥有庞大的用户群体。而华为云弹性云服务器(ECS)以其稳定的性能、灵活的资源调配能力和完善的网络安全体系,成为部署织梦CMS的理想平台。然而,在实际部署过程中,许多用户会遇到Nginx伪...

前言:为什么选择华为云ECS部署织梦CMS

织梦CMS(DedeCMS)作为国内最流行的PHP开源内容管理系统之一,凭借其灵活的模板机制、丰富的插件生态和较低的入门门槛,在中小企业网站、个人博客、资讯门户等领域拥有庞大的用户群体。而华为云弹性云服务器(ECS)以其稳定的性能、灵活的资源调配能力和完善的网络安全体系,成为部署织梦CMS的理想平台。

然而,在实际部署过程中,许多用户会遇到Nginx伪静态规则配置不当导致404错误、目录权限设置过于宽松带来安全隐患、环境搭建流程繁琐等问题。本文旨在提供一份从零开始的完整部署指南,帮助读者在华为云ECS上快速、安全地完成织梦CMS的部署,并深入理解Nginx伪静态与目录权限的核心原理。

需要先登录华为云控制台,点击:华为云控制台,还没有账号,点击:注册并关联,已有账号点击:登录后关联

一、华为云ECS实例的初始化配置

1.1 创建ECS实例的关键参数选择

在华为云控制台创建ECS实例时,以下几个参数直接关系到织梦CMS的稳定运行:

  • 操作系统:推荐选择CentOS 7.x/8.x、Ubuntu 20.04/22.04或Huawei Cloud EulerOS 2.0。这些系统对LNMP环境的支持最为成熟。华为云官方最佳实践中提供了多种操作系统的LNMP手工搭建指南。
  • 实例规格:对于织梦CMS这类PHP+MySQL架构的应用,建议至少选择2核4GB内存的配置。如果预计日均PV超过1万,应考虑升级到4核8GB或更高。
  • 弹性公网IP:实例创建时必须绑定弹性公网IP,否则无法从外部访问网站。
  • 系统盘:建议至少40GB,并根据网站附件(图片、文档等)的预计增长量适当扩容。

1.2 安全组规则配置

安全组是华为云最重要的网络访问控制层,相当于云服务器的虚拟防火墙。织梦CMS网站需要对外提供Web服务,必须在安全组中放行以下端口:

  • 22端口:SSH远程管理端口(建议修改默认端口以增强安全性)
  • 80端口:HTTP网站访问端口
  • 443端口:HTTPS加密访问端口(如配置SSL证书)

在华为云控制台中,可以选用"通用Web服务器"模板,该模板默认放通了22、3389、80、443端口和ICMP协议。如果采用宝塔面板部署,还需要额外放行宝塔面板的默认端口(通常为8888)。

二、LNMP运行环境的搭建

织梦CMS基于PHP+MySQL架构,需要LNMP(Linux+Nginx+MySQL+PHP)或LAMP(Linux+Apache+MySQL+PHP)运行环境。本文聚焦于Nginx服务器,因此选择LNMP架构。LNMP环境的搭建有两种主流方式:手工编译安装和使用宝塔面板一键部署。

2.1 方式一:手工搭建LNMP环境

手工搭建虽然步骤较多,但能让你深入理解每个组件的配置细节,便于后续的故障排查和性能调优。以下以CentOS 7.9系统为例:

步骤1:安装Nginx

# 添加Nginx官方源
sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
# 安装Nginx
sudo yum -y install nginx
# 启动Nginx并设置开机自启
sudo systemctl start nginx
sudo systemctl enable nginx
# 验证安装版本
nginx -v

安装完成后,在浏览器中输入ECS的公网IP,应能看到Nginx的默认欢迎页面。

步骤2:安装MySQL

# 下载MySQL官方Yum源
wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
sudo rpm -ivh mysql80-community-release-el7-3.noarch.rpm
# 安装MySQL服务器
sudo yum -y install mysql-community-server
# 启动MySQL并设置开机自启
sudo systemctl start mysqld
sudo systemctl enable mysqld
# 获取临时密码
grep 'temporary password' /var/log/mysqld.log
# 执行安全配置脚本
sudo mysql_secure_installation

步骤3:安装PHP及所需扩展

织梦CMS对PHP环境有特定要求,需要安装以下扩展:

# 安装EPEL和Remi源
sudo yum -y install epel-release
yum -y install https://rpms.remirepo.net/enterprise/remi-release-7.rpm
# 启用PHP 7.4
sudo yum-config-manager --enable remi-php74
# 安装PHP及扩展
sudo yum -y install php php-fpm php-mysqlnd php-gd php-xml php-mbstring php-json php-curl php-zip php-bcmath
# 启动PHP-FPM并设置开机自启
sudo systemctl start php-fpm
sudo systemctl enable php-fpm

步骤4:配置Nginx与PHP-FPM的协作

编辑Nginx配置文件,使其能够处理PHP请求:

# 编辑Nginx默认站点配置
sudo vi /etc/nginx/conf.d/default.conf

在server块中添加以下location配置:

location ~ \.php$ {
    root           /usr/share/nginx/html;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    include        fastcgi_params;
}

配置完成后重启Nginx:

sudo systemctl restart nginx

2.2 方式二:使用宝塔面板一键部署

宝塔面板是目前国内最流行的服务器管理面板,支持一键安装LNMP/LAMP环境,对新手极为友好。在华为云ECS上安装宝塔面板的步骤如下:

步骤1:安装宝塔面板

以root用户登录服务器,执行宝塔官方一键安装命令:

yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh

安装完成后,系统会显示面板的访问地址、用户名和初始密码,请妥善保存。

步骤2:登录宝塔面板安装LNMP套件

在浏览器中访问宝塔面板地址,首次登录后系统会提示安装环境套件。推荐选择LNMP套件(Nginx、MySQL、PHP),这是搭建织梦CMS所需的最小环境组合。PHP版本建议选择7.4或8.0,MySQL选择5.7或8.0。

宝塔面板的图形化界面使得环境配置变得极为简单,无需手工编辑配置文件即可完成LNMP的完整部署。

三、织梦CMS的安装部署

3.1 下载织梦CMS程序包

访问织梦CMS官方网站下载最新版本的程序包(通常为ZIP格式)。通过宝塔面板的文件管理功能或使用SSH命令将程序包上传到服务器网站根目录。

# 切换到网站根目录(以宝塔默认路径为例)
cd /www/wwwroot/yourdomain.com
# 下载织梦CMS(以官方最新版为例)
wget https://www.dedecms.com/uploads/soft/dedecms.zip
# 解压
unzip dedecms.zip

3.2 创建MySQL数据库

织梦CMS安装需要预先创建一个MySQL数据库。可以通过命令行或宝塔面板的数据库管理功能完成:

# 登录MySQL
mysql -u root -p
# 创建数据库
CREATE DATABASE dedecms DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# 创建数据库用户并授权
CREATE USER 'dedeuser'@'localhost' IDENTIFIED BY 'your_strong_password';
GRANT ALL PRIVILEGES ON dedecms.* TO 'dedeuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;

3.3 运行安装向导

在浏览器中访问 `http://你的域名/install/index.php`,进入织梦CMS的安装向导。安装过程主要分为以下几步:

  • 环境检测:系统会自动检测PHP版本、MySQL扩展、目录权限等,如有不通过项需返回调整。
  • 数据库配置:填写之前创建的数据库名称、用户名和密码,以及数据表前缀(默认为dede_)。
  • 管理员账号设置:设定管理员的用户名和密码,务必使用强密码以提升安全性。
  • 完成安装:点击"下一步",系统完成最后的安装动作。

3.4 安装完成后的安全清理

安装完成后,必须立即删除install目录,防止他人重新安装覆盖网站数据:

rm -rf /www/wwwroot/yourdomain.com/install

四、Nginx伪静态规则深度解析

伪静态(pseudo-static)是指通过服务器配置将动态URL转换为看似静态的URL形式,例如将 `http://example.com/index.php?id=123` 转换为 `http://example.com/index-123.html`。伪静态的核心价值在于:提升搜索引擎的抓取效率(搜索引擎更偏好静态URL)、简化URL结构便于用户记忆和分享、以及在一定程度上隐藏后台动态脚本路径增强安全性。

织梦CMS默认提供的是Apache服务器的伪静态规则(基于.htaccess文件),如果使用Nginx服务器,则需要手动配置URL重写规则。Nginx的伪静态规则相对复杂,需要针对列表页和内容页进行精确的正则匹配。以下是完整的配置方案。

4.1 织梦CMS后台开启伪静态

在配置Nginx规则之前,首先需要在织梦CMS后台开启伪静态功能:

  1. 登录织梦后台(http://你的域名/dede/)
  2. 进入"系统" → "系统基本参数" → "核心设置"
  3. 找到"是否使用伪静态"选项,选择"是"

4.2 Nginx伪静态规则完整代码

编辑Nginx站点配置文件(通常位于 `/etc/nginx/conf.d/` 或 `/www/server/panel/vhost/nginx/` 宝塔面板路径),在server块中添加以下重写规则:

server {
    listen 80;
    server_name yourdomain.com;
    root /www/wwwroot/yourdomain.com;
    index index.php index.html index.htm;

    # 织梦CMS伪静态规则
    location / {
        if (!-e $request_filename) {
            rewrite ^/index\.html$ /index.php last;
            rewrite ^/category/(.+)\.html$ /plus/list.php?tid=$1 last;
            rewrite ^/category/(.+)_(\d+)\.html$ /plus/list.php?tid=$1&TotalResult=$2 last;
            rewrite ^/archives/(.+)_(\d+)\.html$ /plus/view.php?aid=$2 last;
            rewrite ^/tag/(.+)\.html$ /plus/tag.php?tag=$1 last;
            rewrite ^/tag/(.+)_(\d+)\.html$ /plus/tag.php?tag=$1&page=$2 last;
            rewrite ^/member/(.+)$ /member/$1 last;
            rewrite ^/data/(.+)$ /data/$1 last;
            rewrite ^/images/(.+)$ /images/$1 last;
            rewrite ^/templets/(.+)$ /templets/$1 last;
        }
    }

    # PHP请求处理
    location ~ \.php$ {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

上述规则的核心逻辑是:当请求的文件在服务器上不存在时(`!-e $request_filename`),通过正则匹配将静态化的URL重写为织梦CMS实际的动态入口文件。例如,`/category/123.html` 被重写为 `/plus/list.php?tid=123`,`/archives/456.html` 被重写为 `/plus/view.php?aid=456`。

4.3 伪静态规则的验证与调试

配置完成后,需要重启Nginx使规则生效:

sudo systemctl restart nginx

然后访问网站的几个典型页面(栏目页、内容页、标签页),检查是否能够正常打开。如果出现404错误,通常是因为伪静态规则与后台设置不匹配。此时需要检查:

  • 织梦后台是否已开启"使用伪静态"选项
  • Nginx配置文件中的正则表达式是否与后台生成的URL结构一致
  • PHP-FPM是否正常运行

五、目录权限安全设置详解

织梦CMS的目录权限设置直接关系到网站的安全性和功能正常运行。权限设置过松可能导致恶意用户篡改网站内容,权限设置过严则可能导致缓存无法生成、附件无法上传等问题。

5.1 Linux文件权限基础

在Linux系统中,文件和目录的权限分为读(r)、写(w)、执行(x)三种。权限设置通常使用数字表示法:

  • 755:所有者有读、写、执行权限(7=4+2+1),组用户和其他用户有读和执行权限(5=4+1)
  • 644:所有者有读和写权限(6=4+2),组用户和其他用户只有读权限(4)
  • 750:所有者有读、写、执行权限,组用户有读和执行权限,其他用户无任何权限

5.2 织梦CMS各目录权限标准

根据织梦CMS的官方安全建议和行业最佳实践,各目录的权限设置如下:

目录 建议权限 说明
/data 755 存放缓存、数据库配置等敏感数据,需可读写
/uploads 755 用户上传的图片、附件等,需可写入
/templets 755 模板文件目录,需可读写
/html 或 /a 755 静态页面生成目录,需可写入
/dede(后台目录) 755 后台管理目录,建议安装后改名
/include 755 核心包含文件,一般只需读权限
其他目录 755 一般目录权限
普通文件(.php/.html等) 644 文件权限

5.3 批量设置目录权限的命令

通过SSH登录服务器,执行以下命令批量设置织梦CMS各目录的权限:

# 切换到网站根目录
cd /www/wwwroot/yourdomain.com

# 设置目录权限为755
find . -type d -exec chmod 755 {} \;

# 设置文件权限为644
find . -type f -exec chmod 644 {} \;

# 特定目录需要写入权限(设为755已满足)
chmod -R 755 data uploads templets html

# 设置所有者为Web服务器用户(以www为例)
chown -R www:www /www/wwwroot/yourdomain.com

5.4 重要安全提醒

  • 切勿使用777权限:虽然777可以解决所有写入问题,但存在严重的安全隐患。任何用户都可以读写执行目录下的文件,极易被利用进行恶意攻击。
  • 删除install目录:安装完成后务必删除install目录,防止重装攻击。
  • 更改默认后台目录:将默认的/dede目录改为自定义名称,降低被暴力破解的风险。
  • 使用独立数据库账户:为每个网站创建独立的MySQL用户,遵循最小权限原则。

六、自动化一键部署脚本

为了进一步简化部署流程,本文提供一个Shell自动化脚本,实现从LNMP环境安装到织梦CMS部署的全流程自动化。该脚本适用于CentOS 7.x/8.x系统,集成了环境检测、依赖安装、织梦CMS下载解压、Nginx伪静态配置、目录权限设置等核心功能。

6.1 一键部署脚本完整代码

#!/bin/bash
# =====================================================
# 华为云ECS织梦CMS一键部署脚本
# 适用于CentOS 7.x/8.x + LNMP环境
# =====================================================

set -e

# 配置变量
DOMAIN="${1:-localhost}"
DB_NAME="dedecms"
DB_USER="dedeuser"
DB_PASS=$(openssl rand -base64 16)
ADMIN_PASS=$(openssl rand -base64 12)
SITE_ROOT="/www/wwwroot/${DOMAIN}"

echo "=========================================="
echo "  华为云ECS织梦CMS一键部署脚本"
echo "  域名: ${DOMAIN}"
echo "=========================================="

# 1. 更新系统并安装基础工具
echo "[1/8] 更新系统并安装基础工具..."
yum update -y
yum install -y wget unzip tar gcc gcc-c++ make openssl-devel

# 2. 安装Nginx
echo "[2/8] 安装Nginx..."
rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
yum install -y nginx
systemctl start nginx
systemctl enable nginx

# 3. 安装MySQL
echo "[3/8] 安装MySQL..."
wget -q https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
rpm -ivh mysql80-community-release-el7-3.noarch.rpm
yum install -y mysql-community-server
systemctl start mysqld
systemctl enable mysqld

# 获取MySQL临时密码
TEMP_PASS=$(grep 'temporary password' /var/log/mysqld.log | awk '{print $NF}')
echo "MySQL临时密码: ${TEMP_PASS}"

# 4. 安装PHP 7.4
echo "[4/8] 安装PHP 7.4及扩展..."
yum install -y epel-release
yum install -y https://rpms.remirepo.net/enterprise/remi-release-7.rpm
yum-config-manager --enable remi-php74
yum install -y php php-fpm php-mysqlnd php-gd php-xml php-mbstring php-json php-curl php-zip php-bcmath
systemctl start php-fpm
systemctl enable php-fpm

# 5. 创建网站目录并下载织梦CMS
echo "[5/8] 创建网站目录并下载织梦CMS..."
mkdir -p ${SITE_ROOT}
cd ${SITE_ROOT}
wget -q https://www.dedecms.com/uploads/soft/dedecms.zip
unzip -q dedecms.zip
rm -f dedecms.zip

# 6. 创建数据库
echo "[6/8] 创建数据库..."
mysql -u root -p${TEMP_PASS} --connect-expired-password <<EOF
ALTER USER 'root'@'localhost' IDENTIFIED BY '${DB_PASS}';
CREATE DATABASE ${DB_NAME} DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER '${DB_USER}'@'localhost' IDENTIFIED BY '${DB_PASS}';
GRANT ALL PRIVILEGES ON ${DB_NAME}.* TO '${DB_USER}'@'localhost';
FLUSH PRIVILEGES;
EOF

# 7. 配置Nginx伪静态
echo "[7/8] 配置Nginx伪静态规则..."
cat > /etc/nginx/conf.d/${DOMAIN}.conf <<EOF
server {
    listen 80;
    server_name ${DOMAIN};
    root ${SITE_ROOT};
    index index.php index.html index.htm;

    location / {
        if (!-e \$request_filename) {
            rewrite ^/index\\.html$ /index.php last;
            rewrite ^/category/(.+)\\.html$ /plus/list.php?tid=\$1 last;
            rewrite ^/category/(.+)_(\\d+)\\.html$ /plus/list.php?tid=\$1&TotalResult=\$2 last;
            rewrite ^/archives/(.+)_(\\d+)\\.html$ /plus/view.php?aid=\$2 last;
            rewrite ^/tag/(.+)\\.html$ /plus/tag.php?tag=\$1 last;
        }
    }

    location ~ \\.php$ {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name;
        include fastcgi_params;
    }
}
EOF

# 8. 设置目录权限
echo "[8/8] 设置目录权限..."
find ${SITE_ROOT} -type d -exec chmod 755 {} \;
find ${SITE_ROOT} -type f -exec chmod 644 {} \;
chown -R nginx:nginx ${SITE_ROOT}

# 删除install目录(安全)
rm -rf ${SITE_ROOT}/install

# 重启服务
systemctl restart nginx
systemctl restart php-fpm

echo "=========================================="
echo "  ✅ 部署完成!"
echo "=========================================="
echo "  网站地址: http://${DOMAIN}"
echo "  数据库名: ${DB_NAME}"
echo "  数据库用户: ${DB_USER}"
echo "  数据库密码: ${DB_PASS}"
echo "  管理员初始密码: ${ADMIN_PASS}"
echo "=========================================="
echo "  请访问 http://${DOMAIN}/install/index.php 完成安装向导"
echo "  安装完成后请手动删除install目录"
echo "=========================================="

6.2 脚本使用方法

  1. 将上述脚本保存为 `deploy_dedecms.sh`
  2. 赋予执行权限:`chmod +x deploy_dedecms.sh`
  3. 执行脚本:`./deploy_dedecms.sh yourdomain.com`(将yourdomain.com替换为实际域名或IP)

脚本会自动完成LNMP环境安装、织梦CMS下载解压、数据库创建、Nginx伪静态配置和目录权限设置。执行完成后,访问 `http://你的域名/install/index.php` 进入织梦CMS安装向导完成最后配置即可。

七、常见问题与解决方案

问题1:Nginx伪静态配置后访问页面出现404错误

原因分析:伪静态规则配置不正确,或者织梦CMS后台未开启"使用伪静态"选项。

解决方案:首先检查织梦后台"系统基本参数"→"核心设置"中"是否使用伪静态"是否为"是";其次检查Nginx配置文件中的rewrite规则是否与后台URL结构匹配;最后重启Nginx使配置生效。

问题2:data目录无法写入,缓存生成失败

原因分析:data目录权限设置不当,Web服务器用户没有写入权限。

解决方案:将data目录权限设置为755,并确保所有者为Web服务器用户(如www或nginx)。执行命令:`chmod -R 755 /path/to/data` 和 `chown -R www:www /path/to/data`。

问题3:上传图片失败,提示目录不可写

原因分析:uploads目录权限不足。

解决方案:将uploads目录权限设置为755:`chmod -R 755 /path/to/uploads`。如果问题依旧,检查SELinux是否限制了Web服务器的写入权限。

问题4:安装完成后忘记删除install目录

原因分析:安装流程中忽略了安全清理步骤。

解决方案:立即删除install目录:`rm -rf /path/to/install`。如果不慎被他人访问install目录并重新安装,会导致原有数据被覆盖。

问题5:宝塔面板安装的LNMP环境,伪静态规则放在哪里

解决方案:在宝塔面板的网站管理页面,找到对应站点,点击"设置"→"伪静态",将Nginx伪静态规则代码粘贴到输入框中保存即可。宝塔面板会自动将规则写入Nginx配置文件并重载服务。

问题6:如何验证伪静态是否生效

解决方案:发布一篇带有多级栏目的文章,然后访问该文章对应的静态化URL(如 `/archives/文章ID.html`)。如果能够正常显示内容且URL地址栏保持不变,则说明伪静态配置成功。同时可以检查Nginx的access日志,确认请求被正确转发到PHP-FPM处理。

结语

本文从华为云ECS的初始化配置入手,详细讲解了织梦CMS部署的完整流程,重点剖析了Nginx伪静态规则的配置原理与实现方法,以及各关键目录的安全权限设置标准。通过手工搭建与宝塔面板两种方式的对比,读者可以根据自身技术水平和运维习惯选择最适合的部署路径。文末提供的一键部署脚本将整个流程自动化,大幅降低了部署门槛和出错概率。

织梦CMS作为一款成熟的开源CMS,其部署和维护需要运维人员对Web服务器、数据库、PHP环境有扎实的理解。希望本文能够帮助读者在华为云ECS上快速搭建一个安全、高效的织梦CMS网站,并在实际运维中举一反三,灵活应对各种技术挑战。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。