一台服务器完全可以同时运行多个网站,核心方法是通过虚拟主机技术按域名或端口区分流量,普通配置的云服务器部署十个八个中小型站点毫无压力。
很多站长第一次接触多站点部署时,潜意识里觉得一台服务器对应一个网站,换个站点就得再买台机器,无论是Apache、Nginx还是Windows IIS,从设计之初就支持在一台物理机上托管多个Web站点,这套机制叫“虚拟主机”,行业共识认为它是目前利用率最高的服务器资源管理方案。
下面我从原理、实操到排错,把一台服务器怎么设置多个web站这件事拆开讲透,你按照自己的服务器环境对号入座就行。
一台服务器怎么设置多个web站先搞懂它的底层逻辑
服务器接收访问请求时,靠什么判断用户想去哪个网站?这取决于你用的是IP识别还是域名识别。
- IP识别:一个公网IP对应一个站点,想让服务器跑多个站点,就得给网卡绑定多个IP地址,这种方案受限于IP资源,普通用户基本用不上。
- 域名识别:多个域名指向同一个服务器IP,服务器收到请求后读取HTTP头里的Host字段,根据域名把请求转发给对应的站点目录,这是当前最主流的做法,也完全免费。
你可以把服务器想象成一栋写字楼,IP是大门地址,每个域名是楼里的公司门牌,Web服务器软件就是前台,访客进来报出公司名,前台就把他带到对应办公室。
明确了这一层,剩下的事就简单了:把域名解析到服务器IP,然后在Web服务器里配置好域名与目录的对应关系。
服务器配置多个网站教程:Apache与Nginx实战操作
目前市面上的Linux服务器主要跑两种Web服务软件,配置逻辑大同小异,你只需认准自己环境里的那一套。
Apache环境:修改httpd.conf或vhost配置文件
Apache通过<VirtualHost>指令块定义站点,大多数面板环境已经把配置拆分成单独的vhost文件,存放在/etc/httpd/conf.d/或/etc/apache2/sites-available/目录下。
假设我要在一台服务器上同时跑example1.com和example2.com大致如下:
<VirtualHost :80>
ServerName example1.com
ServerAlias www.example1.com
DocumentRoot /var/www/example1
<Directory /var/www/example1>
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
<VirtualHost :80>
ServerName example2.com
ServerAlias www.example2.com
DocumentRoot /var/www/example2
<Directory /var/www/example2>
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
改完配置记得执行apachectl configtest检查语法,然后systemctl reload httpd重载服务,这一步很多人会漏,语法有误时服务直接起不来,排查起来特别头疼。
Nginx环境:配置server block代码块
Nginx的配置逻辑更清晰,每个站点一个server块,配置文件通常在/etc/nginx/conf.d/下,同样两个域名,对应的配置长这样:
server {
listen 80;
server_name example1.com www.example1.com;
root /var/www/example1;
index index.php index.html;
}
server {
listen 80;
server_name example2.com www.example2.com;
root /var/www/example2;
index index.php index.html;
}
很多初学者搞不懂为什么Nginx配置了多个server块却只生效第一个,十有八九是忘了每个站点都要写上listen 80,Nginx默认只读取第一个匹配的server块,如果第二个域名没有对应块,就会落到默认站点上,表现就是多个域名打开同一个页面。
调整完执行nginx -t验证配置,再systemctl reload nginx就行。
Windows服务器:IIS的站点绑定
Windows环境下主要是IIS,操作更图形化,打开IIS管理器,右键“网站”选择“添加网站”,填写站点名称、物理路径,最重要的是“绑定”区域。
- 类型:http或https
- 主机名:填写你的域名,比如
example1.com - 端口:默认80
多个站点重复此操作,把主机名换成不同域名,IIS会自动根据Host头区分访问请求,不需要额外配置。
用宝塔面板给服务器配置多个网站,小白最省心的路径
如果你不想碰命令行,宝塔面板这类可视化工具是当下性价比最高的选择,用宝塔面板给服务器配置多个网站,流程基本是填空式操作。
- 在域名服务商处把
example1.com和example2.com的A记录都解析到服务器IP - 登录宝塔面板,点击左侧“网站”,选择“添加站点”
- 输入域名,自动创建对应的站点目录和数据库(如果需要)
- 点击“设置”,在“配置文件”里按需调整伪静态规则
- 如果站点使用ThinkPHP、Laravel等框架,在“伪静态”里选择对应模板
整个过程两三分钟就能完成一个站点,比手写配置文件省事得多,面板还会自动帮你处理网站目录的权限问题,避免了手动设置chown和chmod时容易犯的低级错误。
一台服务器上多个网站共存的进阶注意事项
站点能跑起来只是第一步,多站点共存后资源怎么分配、安全怎么隔离、数据怎么备份,才是真正考验运维水平的地方。
目录隔离与权限控制
每个网站必须使用独立的目录,不能图省事全堆在/var/www/html下,推荐结构是:
/var/www/example1.com/存放站点一所有文件/var/www/example2.com/存放站点二所有文件- 每个目录单独设置系统用户和用户组,防止一个站点被入侵后拖累其他站点
PHP站点要特别注意open_basedir配置,限制PHP脚本只能访问自己的目录,在宝塔面板里这个选项位于站点设置-PHP扩展,手动配置则在php.ini或vhost配置文件里指定。
不同站点使用不同PHP版本
不少老站跑PHP 5.6,新站用PHP 8.2,在一台服务器上怎么兼容?其实很简单。
- Apache+php-fpm:每个VirtualHost里指定不同的
SetHandler,指向不同版本的php-fpm socket - Nginx+php-fpm:每个server块里通过
fastcgi_pass指向不同PHP版本的监听端口 - 宝塔面板:直接在站点设置里选择PHP版本,面板自动切换
这种方式能让你一台服务器跑起完全不同的技术栈组合,老项目不用升级,新项目不用迁就旧环境。
多域名HTTPS证书部署
现在HTTP协议已经被浏览器标记为不安全,给每个站点部署SSL证书是标配,动手前先明确两点:
- 免费证书(Let‘s Encrypt、ZeroSSL)单张只能覆盖一个主域名及其子域名,有几个站点就申请几张
- Nginx里每个server块单独配置
ssl_certificate和ssl_certificate_key,互不干扰
用宝塔面板的话,在站点设置-SSL里选择Let’s Encrypt,勾选域名,点申请即可,证书到期前面板会自动续签,手动配置环境下可以用certbot工具批量管理证书续期。
端口分配的特殊用法
如果某个站点不想绑定域名,只想通过IP加端口访问,比如http://服务器IP:8080,配置方式稍有不同。
Nginx里写成:
server { listen 8080; server_name _; root /var/www/example2; }
需要注意两点:一是国内云服务器默认防火墙只放行80和443端口,用非标准端口需要去云控制台的安全组里放行对应端口;二是通过IP加端口访问的站点无法使用HTTPS证书,只能走HTTP协议。
这台服务器上跑多个容器组成的站群,还有更进阶的玩法用Docker把每个站点封装在独立容器里,容器化部署的优势是环境完全隔离,互不污染,缺点是资源占用比直接跑在宿主机上略高,对一般站长来说,虚拟主机方案已经完全够用。
部署多站点后常见故障排查清单
即便配置过程完全照着标准来,多站点上线后也可能遇到各种幺蛾子,遇到问题别慌,按下面的清单逐项排查。
- 多个域名打开都是同一个页面:检查是否有重复的
server_name配置,或者某个server块遗漏了listen指令 - 域名解析正确但无法访问:先
ping域名看解析是否生效,再用telnet 服务器IP 80测试端口连通性 - 访问出现403或404:大概率是站点目录权限不对或
index指令指定的文件不存在 - 改了配置不生效:检查是否正确执行了reload,而不是restart,Nginx下
nginx -t先验证语法再reload - 一个站点被攻击影响其他站点:检查是否所有站点都运行在同一个用户下,尽量做目录隔离,有条件上容器
说到底,一台服务器怎么设置多个web站,核心就三件事:域名解析到位、Web服务器配置正确、目录权限清晰,把这三条理顺,剩下的都是细节问题。
Q&A:服务器配置多个网站常见疑问解答
Q:一台服务器最多能挂多少个网站?
没有硬性上限,理论上Nginx和Apache的虚拟主机数量只受服务器硬件资源约束,实际操作中,一个2核4G的云服务器跑十个左右中小流量网站完全没问题,大型站点则需根据并发量评估,遇到内存不足时优先考虑升级配置,而不是减少站点。
Q:一台服务器多个网站需要单独备案吗?
根据国内机房规则,域名需要完成ICP备案才能解析到大陆服务器,不同域名指向同一台服务器,每个域名都需要单独备案,如果使用香港或海外服务器,则不受此限制,据工信部域名备案相关规定,备案审核通常需要7到20个工作日。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/735347.html




