实际应用中一台服务器可以同时托管多个网站。若配置不当,可能导致资源争抢、安全问题,甚至SEO降权。本文将拆解虚拟主机技术,手把手教你安全部署多站点。

虚拟主机(Virtual Host) 是主流解决方案,通过区分域名端口,将请求精准路由至不同站点目录。

以下是3种常用方式,本文介绍基于域名和端口

  • 基于域名(推荐⭐️):同一IP绑定多域名(如 www.site1.com与 www.site2.com),用户无感知。
  • 基于端口:通过 :8080:8081区分站点,适合测试环境。
  • 基于IP(少用):需多个公网IP,成本高昂。

一、基于域名,同一IP、同一端口绑定多个域名

场景:

通过80端口,让 example.com 和 test.com 指向不同的网站目录(如 /var/www/example 和 /var/www/test)。

配置步骤:

创建两个域名对应的网站目录:
mkdir -p /var/www/example
mkdir -p /var/www/test

目录与权限隔离,否则导致跨站文件篡改。

编辑Nginx配置文件
修改默认nginx.conf 文件

rpm/yum安装通常为 /etc/nginx/nginx.conf ,源码安装使用nginx -V查看

加入 include /usr/www/ngconfs/*.conf;

读取ngconfs文件下所有 *.conf文件

Nginx配置部署多站点_部署多站点

编辑各站点Nginx配置文件

ngconfs 下多个文件创建

编辑 /etc/nginx/conf.d/example.conf

重复配置:复制文件修改为 test.conf,替换域名与目录。

# 配置example.conf    ----- example.com
server {listen 80;server_name example.com;  # 指定域名root /var/www/example;    # 网站根目录index index.html;         # 默认首页# 其他配置(如日志、反向代理等)access_log /var/log/nginx/example_access.log;error_log /var/log/nginx/example_error.log;
}# 配置test.conf    ----test.com
server {listen 80;server_name test.com;root /var/www/test;index index.html;access_log /var/log/nginx/test_access.log;error_log /var/log/nginx/test_error.log;
}

测试配置并重启Nginx:
 nginx -t        # 检查配置语法systemctl reload nginx  # 或重启:sudo systemctl restart nginx

二、基于端口,同一IP不同端口

场景

通过IP的8080端口提供静态页面,8081端口运行一个Node.js应用。

配置步骤

创建不同端口的服务目录:
sudo mkdir -p /var/www/static
sudo mkdir -p /var/www/nodeapp
编辑Nginx配置文件
修改默认nginx.conf 文件

同上

编辑各站点Nginx配置文件

ngconfs 下多个文件创建

编辑 /etc/nginx/conf.d/static.conf

重复配置:复制文件修改为 nodeapp.conf

# static.conf   静态站点(8080端口)
server {listen 8080;server_name localhost;  # 可省略或指定IProot /var/www/static;index index.html;
}#nodeapp.conf  Node.js应用代理(8081端口)
server {listen 8081;server_name localhost;location / {proxy_pass http://localhost:3000;  # 假设Node.js运行在3000端口proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;}
}

测试配置并重启Nginx:

sudo nginx -t
sudo systemctl reload nginx

三、关键注意事项

  1. 域名解析

确保域名已正确解析到服务器IP(通过DNS设置或本地hosts文件临时测试)

  1. 防火墙开放端口

如果使用防火墙(如UFW或firewalld),需放行对应端口:

sudo ufw allow 80/tcp
sudo ufw allow 8080/tcp
sudo ufw allow 8081/tcp

环境

操作命令/位置

说明

Linux防火墙

sudo ufw allow 8080/tcp

开放指定端口

SELinux

semanage port -a -t http_port_t -p tcp 8080

添加端口到策略

阿里云/腾讯云

控制台 → 安全组 → 添加入站规则

90%故障源于未开云防火墙!



  1. 默认服务器

如果请求未匹配任何 server_name,Nginx会使用第一个 server 块作为默认。可手动指定:

  1. HTTPS扩展

若需启用HTTPS,每个域名需单独配置SSL证书:

server {listen 443 ssl;server_name example.com;ssl_certificate /path/to/example.crt;ssl_certificate_key /path/to/example.key;...
}
  1. 日志分离

建议为每个服务配置独立日志,便于排查问题。