一台服务器完全可以安装2个Discuz论坛,核心思路是让两个站点在文件、数据库、端口或域名层面彻底隔离,互不干扰。很多站长在发展初期只有一个服务器,却同时需要运行主站和分站,或者想做一个测试站用于改版验证,这篇文章就从部署方案、实操步骤到常见坑位,把这件事讲透,读者照着操作基本不会走弯路。
一台服务器安装2个Discuz,先分清两种部署方案
在动手之前,必须先明确一个前提:Discuz是PHP程序加MySQL数据库的架构,两台论坛共用一个服务器,本质上就是让两套PHP代码、两个数据库、两个网站入口共存于同一台物理机,行业共识认为,只要资源够用,这种方式完全可行。
从实际操作的简易程度来看,市面上主流的做法有两大类:
- 用不同二级域名区分:比如
bbs1.example.com和bbs2.example.com分别指向服务器上的两个不同目录,通过Nginx或Apache配置两个独立的虚拟主机,这是最推荐的方式,逻辑清晰,后期维护方便,cookie不会互相干扰。 - 用不同端口区分:比如主站跑在80端口,另一个站跑在8080端口,这种方式只适合临时测试,因为用户访问时需要手动输入端口号,体验非常差,除非只是自己调试代码用,否则不推荐在生产环境使用。
另外还有一个概念需要澄清:如果在宝塔面板或类似控制面板里看到“一个网站”下面可以绑定多个域名,那只是域名绑定,不是多套程序运行,真正的“2个DZ”,必须是两套独立的Discuz程序文件,或者使用一套程序但通过多站点模式加载不同配置,后者复杂度高,不建议新手尝试。
一台服务器安装2个discuz具体怎么做?下面以最稳妥的二级域名方案为例,逐步拆解。
二级域名方案:两台论坛共用一个服务器怎么配置
这里假设服务器已经装好了LNMP环境(Linux+Nginx+MySQL+PHP),并且已经有一个Discuz在正常运行,现在要在这个服务器上新建第二个Discuz站点。
第一步:规划目录和数据库
先把物理路径规划好,常规做法是:
- 主站目录:
/www/wwwroot/bbs1 - 分站目录:
/www/wwwroot/bbs2
数据库也要分开建,Discuz的安装程序会在数据库里生成带前缀的表(默认是pre_),理论上可以用同一个数据库实例下的不同库来区分,但为了彻底避免调错数据,强烈建议新建一个独立的数据库,操作命令如下(可以在phpMyAdmin或者命令行中执行):
CREATE DATABASE discuz2 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
同时在MySQL里创建一个专用的数据库用户,只给这个用户授权discuz2库的权限,这一步非常关键,因为Discuz的配置文件里会写入数据库账号密码,如果两个站点共用一个超级账号,万一代码被注入,攻击者可以同时拖走两个库,按照最小权限原则操作,能省掉很多隐患。
第二步:上传并安装第二个Discuz程序
把下载好的Discuz安装包解压,直接上传到/www/wwwroot/bbs2目录,然后给目录设置正确属主和权限:
chown -R www:www /www/wwwroot/bbs2 chmod -R 755 /www/wwwroot/bbs2
这里注意,www用户是LNMP环境中Nginx的运行用户,如果用的是其他用户(比如nginx或者apache),要相应调整,权限设置不能省,否则安装过程中会出现文件无法写入的报错。
在浏览器里访问http://bbs2.example.com/install
,进入Discuz安装向导,安装过程中会要求填写数据库信息,这时候就把刚才新建的discuz2库名、专属数据库用户填进去,只要数据库信息不冲突,就完成了第二个论坛的核心安装。
第三步:配置Nginx虚拟主机
这一步是“一台服务器怎么安装2个DZ”的关键所在,Nginx需要为两个域名分别建立独立的server块,以宝塔面板为例,直接在面板里“添加站点”,填域名bbs2.example.com,根目录指向/www/wwwroot/bbs2,PHP版本选择与主站一致,然后自动生成配置即可。
如果是纯命令行操作,就需要手动写配置,在/etc/nginx/conf.d/下新建bbs2.conf大致如下:
server {
listen 80;
server_name bbs2.example.com;
root /www/wwwroot/bbs2;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ .php$ {
fastcgi_pass unix:/tmp/php-cgi-74.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
对于Discuz来说,伪静态规则要特别注意,如果第二个站点开启了URL静态化,Nginx里还需要加入Discuz的伪静态rewrite规则,不然帖子链接会404,伪静态规则在Discuz后台的“全局- GEO设置- URL静态化”页面可以复制,但要注意,不同版本的Discuz规则略有差异,建议到Discuz官方应用中心或官方论坛查找对应版本的Nginx规则,避免自己瞎写。
第四步:修改配置文件中的域名和Cookie作用域
这一步非常容易遗漏,但直接关系到两个站能不能同时登录、互踢。
Discuz的配置文件是/www/wwwroot/bbs2/config/config_global.php,打开后找到$_config['cookie']['cookiedomain']这一项,默认值是空字符串,表示Cookie作用域跟随当前域名,如果想让主站和分站互相跳转时保持登录状态,就得把这里设置成.example.com,但这里有个权衡:
- 如果两个论坛的会员体系是独立的,不需要共享登录,那就不要改Cookie域,保持为空即可,这样两个站的Cookie互相隔离,很安全。
- 如果希望两个站共用一套用户中心(UCenter),那就需要进入UCenter后台做应用通信配置,这个相对复杂,涉及应用ID、通信密钥、接口URL等参数,需要两边配置完全匹配。
对于普通场景下“一台服务器安装2个Discuz”,建议保持两套独立体系,Cooke不共享,省心省力。
服务器多开dz论坛,资源分配与性能调优怎么安排
一个服务器跑两个论坛,物理资源是确定的,内存、CPU、磁盘IO这三样东西是关键,多数情况下,如果两个站都是中小型论坛,并发在线人数加起来不超过三五百人,一台2核4G的云服务器完全能扛住,但如果有一个站流量突然暴涨,另一个站就会跟着卡顿,这是共享资源的必然结果。
为了减少互相拖累,可以从以下几个维度做调优:
- PHP-FPM进程池隔离:在
php-fpm.conf里为两个站点分别配置独立的pool,比如bbs1用一个pool,bbs2用另一个pool,各自设定pm.max_children上限,这样bbs1的请求洪峰不会吞掉bbs2的全部PHP进程。 - MySQL连接数控制:MySQL的
max_connections是全局限制,两个dz共用这个值,如果两个站的连接池都开得很大,总量就容易超标,可以在my.cnf里适当调低单站的连接复用参数,或者使用MySQL的ProxySQL做中间层,但对于小站来说没必要,直接限制PHP-FPM的单站并发就够了。 - 磁盘与备份策略:两个站的附件上传目录要分开,不要把bbs2的
data/attachment软链到bbs1去,定时备份要错开时间,避免两个站的数据库同时做全量备份把磁盘IO拉满。
对于带宽,也要提前规划好,图片附件是Discuz的老大难问题,如果两个站都有大量图片加载,建议把静态资源域名分开,或者挂到对象存储CDN上,这项改动对性能提升非常明显。
常见坑位:2010-2026老站长踩过的那些雷
安装第二个Discuz并不难,但很多新手会在细节上栽跟头,这里列出最典型的几个报错场景和对应解法,按影响严重程度从上往下排。
第一个坑:后台进不去,登录无限循环
这种情况多半是Cookie作用域没配置好,或者通信密钥不匹配,先检查config_global.php里的$_config['cookie']['cookiepre'],为两个站设置不同的cookie前缀,比如一个用b1_,一个用b2_,可以避免同域下互相干扰。
第二个坑:伪静态失效,所有帖子链接都404
这个大概率是Nginx规则没用对,Discuz X3.5的伪静态规则和X3.4略有不同,建议确认所使用Discuz版本在Nginx下的官方规则,如果已经按官方规则写了,仍然404,就检查try_files那一行是否被其它location覆盖了。
第三个坑:数据库连接失败,提示“无法连接到数据库服务器”
检查config_global.php中的数据库地址是否为0.0.1,如果服务器开了MySQL远程访问限制,有时候用localhost反而会触发权限表问题,在命令行里先测一下:
mysql -u discuz2_user -p -h 127.0.0.1 discuz2
如果命令行能连上,但论坛报错,说明PHP连接串里的密码或者主机名写错了。
第四个坑:两个站同时使用同一套UCenter
有些站长想省事,把两个站点都指向同一个UCenter,这种做法会导致用户数据同步混乱,比如A站修改密码,B站登录不了,或者A站用户消失了,如果没有特殊需求,一台服务器安装2个DZ时,完全没必要共享UCenter,只用记住:两套程序、两个库、两个UCenter,这样是最省心的。
一台服务器安装2个DZ需要多大带宽和配置
这个问题没有标准答案,但可以根据站点规模做一个大概评估,业内专家指出,一台1核1G的入门级云服务器,跑一个Discuz已经是临界状态,再开第二个站就非常勉强,建议至少2核4G起步。
具体到带宽方面,如果两个站合计日均PV在1万以内,输出带宽5M基本够用,但如果附件图片较多,就要考虑10M以上的独享带宽,或者干脆上CDN,线上环境建议用云监控工具长期观察负载,如果PHP-FPM的listen队列经常堆积,说明资源真的不够了,这时候再怎么优化程序配置也难有改观,只能升级硬件或者拆到两台服务器。
口说无凭,整理一个简单的配置参考表:
| 两个站点总规模 | 推荐CPU | 推荐内存 | 推荐带宽 | 适合场景 |
|---|---|---|---|---|
| 测试站+小流量站 | 2核 | 4G | 3M-5M | 日常调试、个人论坛 |
| 日均几千PV | 2核 | 8G | 5M-10M | 小型社区、垂直论坛 |
| 日均几万PV | 4核 | 16G及以上 | 10M以上 | 人气论坛、资源站 |
这个表格只是一个经验值,具体还要看数据库大小、插件数量、附件体积等因素,对于一台服务器安装2个Discuz的场景,多数情况下4G内存就能覆盖需求。
一台服务器安装2个Discuz,用面板还是命令行
如果服务器是Windows系统或者已经装了宝塔面板、WDCP这类管理面板,直接在面板操作要省事得多,上面所有Nginx配置、数据库创建、伪静态导入,都在图形界面里完成。
但面板也有一个不舒服的地方:面板本身会占用内存,有些轻量服务器装上面板后剩余资源就变得紧张,这时候纯命令行操作反而比面板更优选,因为部署nginx、php、mysql都更可控,优化项能细化到具体参数。
推荐的操作路径是:
- 新手站长:优先用宝塔面板,能大幅缩短安装时间,减少手工写配置的出错率
- 有一定Linux基础的:直接命令行操作,部署完了用一个
nginx -t检查语法,然后用systemctl reload nginx重启生效
有的服务器商自带安全组策略,443端口如果需要开启SSL,要记得在安全组里放行,另一个细节是ulimit限制,如果文件描述符太低,高并发下会报“Too many open files”,需要在/etc/security/limits.conf里调大上限。
一台服务器安装2个Discuz后,备份和迁移要注意什么
装好之后,日常运维也有一套固定的套路,推荐在计划任务里设置分组备份:
- 每天凌晨备份数据库:用
mysqldump导出各自的库 - 每周备份程序文件和附件:用
tar打包到独立磁盘目录,避免打包文件占用网站根目录空间
命令可以直接参考:
mysqldump -u discuz2_user -p'密码' discuz2 > /backup/discuz2_$(date +%Y%m%d).sql tar -czf /backup/discuz2_files_$(date +%Y%m%d).tar.gz /www/wwwroot/bbs2
如果将来有一天需要迁移到另一台服务器,直接把备份文件传过去,在目标服务器安装相同版本的Discuz,再导入数据库、覆盖程序文件即可,注意,UCenter的data/config.inc.php里面有通信密钥,如果两个站各自有独立UCenter,迁移时要一并带走。
Q&A:一台服务器安装2个Discuz时最常问的问题
Q:一台服务器安装2个Discuz,会不会导致账号串号或者数据串库?
不会,只要两个站使用了不同的数据库名称、不同数据库用户以及不同的Cookie前缀,它们之间是完全隔离的,串号大多是因为共用了一个数据库或者Cookie作用域设置有误,按上文方法检查就能避免。
Q:两个discuz论坛共用一个服务器,能用同一套UCenter打通用户吗?
能,但需要分别配置应用通信,且要求UCenter主库和两个应用之间的通信密钥设置完全一致,打通后,用户在一个站注册、登录,另一个站也同步生效,但需要注意的是,这种方案会让两个站点的用户基础完全绑定,一旦UCenter出问题,两个论坛都会受影响。
Q:一台服务器安装2个DZ后,如何确定两个站各用了多少内存?
可以用ps aux命令按进程PID来区分,执行以下命令:
ps -eo pid,ppid,rss,cmd | grep php-fpm | grep bbs1 ps -eo pid,ppid,rss,cmd | grep php-fpm | grep bbs2
输出的RSS列就是每个PHP进程占用的物理内存,把各自进程的RSS相加,就能估算出每个站点消耗的资源,方便后续调整PHP-FPM的进程上限。
Discuz这个老牌建站程序,至今依然有不少忠实用户,一台服务器安装2个Discuz的方案非常成熟,只要用心把数据库隔离、域名指向和伪静态这三件事做对,两个站就能稳定地并行运行。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/705619.html





