当前位置:首页 > 云服务器 > 正文

linux服务器搭建多个网站

Linux 服务器上,可通过配置Nginx或Apache虚拟主机,为每个网站分配不同域名/端口,设置独立文档根目录与日志,实现多

基于Nginx的虚拟主机配置

在Linux系统中搭建多个网站的核心是通过反向代理服务器(如Nginx/Apache)实现“一对多”的流量分发,每个网站对应一个独立的域名或端口,服务器根据请求头中的Host字段将流量路由到不同的文档根目录,以下是主流方案对比:

特性 Nginx Apache
资源消耗 更低(事件驱动模型) 较高(进程/线程模式)
配置复杂度 简洁直观(基于块结构) 相对复杂
HTTPS支持 原生集成 需模块扩展
静态文件处理效率 极速优化 中等水平

推荐使用Nginx作为主控服务器,因其高性能和灵活的配置系统更适合多站点场景。


实战步骤:从零开始部署

环境准备

  • 操作系统:Ubuntu 22.04 LTS(其他发行版命令类似)
  • 依赖安装: sudo apt update && sudo apt install nginx -y
  • 防火墙开放端口(若启用了UFW): sudo ufw allow 'Nginx HTTP' # 允许80/tcp sudo ufw allow 'Nginx HTTPS' # 允许443/tcp

创建站点结构

为每个域名建立独立目录并设置权限:

# 例:创建两个测试站点 sudo mkdir -p /var/www/example1.com /var/www/example2.com sudo chown -R www-data:www-data /var/www/ # 修改所有者为Web服务器用户 sudo chmod -R 755 /var/www/ # 设置合理权限

安全提示:避免直接以root用户运行Web进程,推荐使用www-data等专用账户。

配置Nginx虚拟主机

编辑主配置文件(/etc/nginx/nginx.conf),取消注释include /etc/nginx/sites-enabled/;,然后在sites-available目录下新建两个配置文件:

linux服务器搭建多个网站 第1张

文件1:/etc/nginx/sites-available/example1.com

server { listen 80; server_name example1.com www.example1.com; root /var/www/example1.com; index index.html; location / { try_files $uri $uri/ =404; } access_log /var/log/nginx/example1_access.log combined; error_log /var/log/nginx/example1_error.log warn; }

文件2:/etc/nginx/sites-available/example2.com

server { listen 80; server_name example2.com; root /var/www/example2.com; index index.php; # 支持PHP时可改为此值 location / { try_files $uri $uri/ @rewrites; } location @rewrites { rewrite ^(.)$ /index.php?q=$1 last; # 常见框架路由规则 } }

关键点:server_name必须与域名解析记录完全匹配,root指向对应的物理路径。

符号链接激活配置

sudo ln -s /etc/nginx/sites-available/example1.com /etc/nginx/sites-enabled/ sudo ln -s /etc/nginx/sites-available/example2.com /etc/nginx/sites-enabled/

技巧:通过软链接实现启用/禁用站点的快速切换。

linux服务器搭建多个网站 第2张

验证并重启服务

sudo nginx -t # 语法检查 sudo systemctl restart nginx

访问 http://example1.com 和 http://example2.com 应看到不同内容。


进阶配置:HTTPS与负载均衡

SSL证书自动续签(Let’s Encrypt)

安装Certbot工具并申请通配符证书:

sudo apt install certbot python3-certbot-nginx -y sudo certbot --nginx -d example1.com -d www.example1.com sudo certbot --nginx -d example2.com

注意:单次最多可添加100个域名,生产环境建议按业务分组申请。

修改后的Nginx配置会自动包含SSL跳转规则:

linux服务器搭建多个网站 第3张

server { listen 443 ssl http2; ssl_certificate /etc/letsencrypt/live/example1.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example1.com/privkey.pem; ...原有配置... } server { listen 80; server_name example1.com www.example1.com; return 301 https://$host$request_uri; # 强制HTTPS }

水平扩展方案

当单台服务器压力过大时,可采用以下架构:

用户请求 → Cloudflare CDN → Nginx负载均衡器 → [后端服务器集群]

通过修改upstream块实现轮询或加权分配:

upstream app_cluster { least_conn; # 根据连接数动态分配 server 192.168.1.101 weight=3; server 192.168.1.102 weight=2; } server { location /api/ { proxy_pass http://app_cluster; } }


常见问题排查手册

现象 可能原因 解决方案
所有域名都指向同一站点 server_name未正确区分 检查每个server块的server_name值
502 Bad Gateway错误 后端服务未启动或网络中断 systemctl status backend-service
SSL握手失败 证书路径错误/过期 sudo certbot renew --force-renewal
静态文件404 root路径配置错误 核对root指令与实际目录一致性
CPU突增导致响应变慢 PHP-FPM进程泄漏 调整pm.max_children参数值


相关问题与解答

Q1: 如果两个网站使用相同的文档根目录会怎样?

A: Nginx会优先匹配最先定义的server块,导致第二个站点无法正常访问,必须为每个站点分配唯一的root路径,即使内容相同也应通过子目录区分。

/var/www/shared_content/siteA → root /var/www/siteA /var/www/shared_content/siteB → root /var/www/siteB

Q2: 如何在不重启Nginx的情况下更新配置?

A: 使用动态重载命令:

sudo nginx -s reload # 平滑重新加载配置(推荐) # 或监控配置文件变化自动应用(需安装inotify工具) sudo apt install inotify-tools nginx -c `pwd`/nginx.conf -g "daemon off; master_process on;" &

警告:频繁重载可能导致短暂连接中断,建议在低峰期操作

0