一台服务器上跑三个 PHP 站,不少人第一反应是开三个端口、装三套环境,各访问各的。真不用。宝塔部署PHP多站点本质是端口加目录——80 和 443 这两个口所有站共用,进来的是谁由域名(Host 头)决定,落到哪个文件夹由站点配置里的 root 决定。这一层想通了,加站点就是几分钟;想不通,就会在「为什么打开是别人家首页」上面耗掉一晚上。

目录这半截:/www/wwwroot 下一个域名一个坑
宝塔建站的时候默认把根目录放在 /www/wwwroot/你的域名,顺手生成 index.html、404.html、.user.ini 和日志目录。多站点在文件层面就是这么朴实——一个站一个文件夹,互不重叠。nginx 配置里对应的就是一行 root /www/wwwroot/a.com;,换站就是换这一行。
但目录这层有两个细节得盯着。一个是属主,宝塔一般给 www:www,你用 root 传上去的文件,PHP 跑起来可能就没权限写,表现是后台传图失败、缓存目录死活写不进去。另一个是防跨站(open_basedir),这个开关在站点设置里,默认开着,它把 PHP 能访问的路径锁在当前站点目录内。关掉图省事,代价是一个站被挂马之后能顺着读到隔壁站的配置文件。自己权衡,我倾向开着。
端口这半截:80 是一扇公共门
所有站点都监听 80,nginx 收到请求先看 Host 头,再决定交给哪个 server 块,这就是常说的虚拟主机。所以域名解析没做对,请求照样能进来,只是没有 server_name 接它,最后落到默认站点上——你会看到自己域名打开是别人的页面,或者一个空白目录,很容易误判成服务器抽风。
宝塔面板里有个「默认站点」设置,位置不显眼但很关键。把默认站点指到一个空目录或者专门的拦截页,比留着第一个站当默认站要安全。不然别人把没备案的域名解析到你 IP 上,搜索引擎抓到的就是你第一个站的内容,这锅背得莫名其妙。
想用非标准端口也完全可行,比如让某个站走 8080。站点配置里加一行 listen 8080,重载 nginx 就行。但有两处都得放行:系统防火墙(firewalld 或 ufw)一层,云厂商安全组又一层,只开一个照样连不上。这个坑栽的人不少,排查时先看这两处,别急着怀疑代码。
宝塔部署PHP多站点本质是端口加目录,PHP 那层也一样
这条我得多说两句,因为很多人以为多站点只是 nginx 的事。PHP 这一侧同样是目录加端口的逻辑。宝塔装的每个 PHP 版本各跑一套 php-fpm,监听的是独立的 unix socket(形如 /tmp/php-cgi-74.sock)或者 127.0.0.1 上的不同端口。你在站点设置里把 PHP 从 7.4 切到 8.1,实际上就是让 nginx 把 .php 请求转给另一个 fpm 进程。
所以 A 站用 7.4、B 站用 8.1,互不干扰,是两个进程两个入口。反过来,502 这个错十有八九也出在这层:fpm 没起来、socket 路径对不上、或者站点目录被删了可配置还指着它。翻 /www/wwwlogs/ 下那个站的 error.log,通常一眼能看出是连不上 upstream,还是脚本自己报的错。
顺带一句,数据库不用端口来区分多站点。一个 MySQL 实例建多个库、给不同用户分别授权就够了,库名写清楚,别拿默认的 test 当正式库。除非确实需要隔离到实例级别,那才考虑多开。
加完站点打不开,按这个顺序看
别一上来就重装。顺序大概是:域名解析有没有指对(dig 或 ping 一下);安全组和系统防火墙的 80、443 通不通;站点根目录里到底有没有 index;伪静态规则配了没(PHP 站内页 404,多半是这个);最后才轮到 PHP 版本和扩展。这套走完,多数问题当场就能定位。
还有两个隐蔽的。一个是 SSL,每个站一张证书,各配各的,别以为在面板里申请过一次就全站通用;证书到期没续上,浏览器直接拦截,看上去像网站挂了。另一个是 .user.ini 这个文件带锁定属性,改完防跨站设置之后想删得先 chattr -i,不然删不掉、改了也不生效,卡在这里的人真不少。
装站的同时把端口收一收
面板端口别用默认的 8888,换成高位端口;面板设置里能绑授权 IP 就绑上。数据库 3306 不要往公网放,内网访问足够了。这些跟多站点本身没关系,可一台机器上站点越多,被扫、被撞库的面就越大,顺手做了不亏。
回到那句话:宝塔部署PHP多站点本质是端口加目录。以后再碰上多站点的毛病,先问自己两句——请求进的是哪个端口,最后落到哪个目录。这两问答清楚,剩下的多半是权限和配置文件的小毛病,改改就好。
【版权声明】:本站内容若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!