上一篇
虚拟主机可轻松搭建两个网站,依托云端资源灵活分配,独立配置域名与空间,实现高效管理、稳定运行,满足多元建站需求
配置需求
| 项目 | 说明 |
|---|---|
| 操作系统 | Linux(推荐CentOS或Ubuntu);Windows Server(视熟悉度选择) |
| Web服务器软件 | Nginx/Apache + PHP-FPM(动态站点);纯静态可仅用Nginx反向代理 |
| 数据库 | MySQL/MariaDB(独立建库)、SQLite(文件型轻量级方案) |
| 域名解析 | 主域名指向主机IP,通过子域名区分两站点(如 site1.example.com, site2.example.com) |
| SSL证书 | Let’s Encrypt免费通配符证书或单域名证书×2 |
实现步骤详解
第一步:规划目录结构(以Nginx为例)
/var/www/html # 根目录(建议创建软链接管理多站点)
├── site1 # 第一个网站的文档根路径
│ └── index.php # 例:WordPress安装包上传至此
└── site2 # 第二个网站的文档根路径
└── public/ # Node.js应用入口文件存放处
️ 权限设置:确保每个站点目录归属对应用户组(如
chown -R www-data:www-data /var/www/html/site),避免跨站脚本攻击风险。
第二步:配置Nginx虚拟主机
编辑配置文件 /etc/nginx/conf.d/default.conf,添加如下内容:
server {
listen 80;
server_name site1.example.com; # 替换为你的实际子域名
root /var/www/html/site1; # 对应第一步的目录路径
index index.php index.html;
location / {
try_files $uri $uri/ @rewrites; # 支持PHP解析规则
}
# PHP处理块(若需动态语言支持)
location ~ .php$ {
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; # 根据实际PHP版本调整
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
# 同理新增第二个server块,修改server_name和root路径即可
server {
listen 80;
server_name site2.example.com;
root /var/www/html/site2;
... # 其他配置同上
}
技巧:可通过
include /etc/nginx/sites-enabled/.conf实现模块化管理多个站点配置。
第三步:数据库隔离策略
| 站点 | 数据库名 | 用户名 | 主机 | 端口 |
|---|---|---|---|---|
| Site1 | db_site1 | user_site1 | localhost | 3306 |
| Site2 | db_site2 | user_site2 | 0.0.1 | 3306 |
安全实践:为每个数据库设置独立IP白名单访问控制,禁用远程Root登录。
第四步:HTTPS部署(Let’s Encrypt)
使用Certbot工具一键申请证书:
sudo apt install certbot python3-certbot-nginx # Debian系发行版示例 sudo certbot --nginx -d site1.example.com -d site2.example.com --expand
注意:部分服务商可能限制单IP绑定多域名,此时需改用SNI技术支持的SSL配置。
性能优化建议
| 维度 | 方案 |
|---|---|
| CDN加速 | Cloudflare等免费CDN缓存静态资源 |
| Gzip压缩 | Nginx开启gzip on;减少传输体积 |
| 缓存策略 | 对非频繁更新页面设置Cache-Control: max-age=3600 |
| 连接复用 | HTTP/2协议启用多路复用降低握手开销 |
常见问题与解答
Q1: 如果两个网站使用相同的端口会怎样?
A: Nginx基于名称虚拟主机技术(Name-based Virtual Hosting)允许同一IP+端口下共存多个域名,但要求客户端请求头中包含完整的Host字段,现代浏览器均支持此特性,无需担心冲突。
Q2: 如何防止一个网站的流量突增影响另一个?
A: 可通过以下方式实现资源隔离:
1️⃣ 进程级限制:为每个站点配置独立的PHP-FPM池(修改/etc/php/7.x/fpm/pool.d/www.conf中的listen参数);
2️⃣ 带宽管控:使用TC命令限制特定IP段的最大带宽;
3️⃣ 监控告警:部署Prometheus+Grafana实时观察各站点资源占用情况
