努力
加油

如何在轻服务器上配置多个网站共存?

在轻量应用服务器(Lightweight Application Server)上配置多个网站共存,核心逻辑其实就两件事:端口映射和反向XX。

很多新手容易陷入一个误区,觉得“一台服务器只能跑一个域名”或者“必须买昂贵的负载均衡”。其实在 Linux 环境下,只要资源没爆,一台几百块的轻量云完全能扛住几十个甚至上百个站点的流量。

下面我把最稳妥、最主流的方案拆解给你看。假设你的服务器是 CentOS 7/8 或 Ubuntu 20.04+,Web 服务主要用 Nginx(比 Apache 更轻、性能更好,适合轻量机)。

方案一:基于域名的虚拟主机(Server Name)—— 最推荐

这是最标准、最优雅的做法。所有网站共用 80 端口,Nginx 根据请求头里的 Host 字段把流量分发到不同的目录。

1. 前置准备

  • 域名解析:确保你的几个域名(比如 a.com, b.com)都 A 记录指向了这台轻量服务器的公网 IP。
  • SSL 证书:现在没有 HTTPS 的网站很难受。建议去腾讯云/阿里云控制台申请免费的 DV 证书,或者使用 Certbot 自动签发 Let’s Encrypt 证书。

2. Nginx 配置步骤

假设你有两个网站:

  • 网站 A:www.a.com,代码放在 /var/www/a
  • 网站 B:www.b.com,代码放在 /var/www/b

第一步:创建站点目录和测试文件

mkdir -p /var/www/a
echo "<h1>Welcome to A</h1>" > /var/www/a/index.html

mkdir -p /var/www/b
echo "<h1>Welcome to B</h1>" > /var/www/b/index.html

第二步:编写 Nginx 配置文件
不要直接改默认的 nginx.conf,建议在 /etc/nginx/conf.d/ 目录下为每个站点建一个单独的文件,这样好管理。

创建 a.conf:

server {
    listen 80;
    server_name www.a.com a.com; # 如果有其他别名也加上

    root /var/www/a;
    index index.html index.htm;

    location / {
        try_files $uri $uri/ =404;
    }

    # 如果有 PHP,记得加 php-fpm 的 fastcgi_pass
    # location ~ .php$ { ... }
}

创建 b.conf:

server {
    listen 80;
    server_name www.b.com b.com;

    root /var/www/b;
    index index.html index.htm;

    location / {
        try_files $uri $uri/ =404;
    }
}

第三步:启用并重启 Nginx

# 检查语法是否有误(非常重要!)
nginx -t

# 如果显示 syntax is ok,则重启
systemctl restart nginx

此时,访问 www.a.com 和 www.b.com 应该能看到各自的内容了。

3. 开启 HTTPS(可选但强烈建议)

如果你不想每次手动续期证书,可以用 certbot。

# 安装 certbot (Ubuntu)
apt install certbot python3-certbot-nginx

# 运行命令,它会帮你修改 nginx 配置并获取证书
certbot --nginx -d www.a.com -d www.b.com

Certbot 会自动生成 SSL 配置块,并把 HTTP 强制跳转到 HTTPS。


方案二:基于端口的反向XX —— 适合跑不同后端服务

如果你的网站不是静态 HTML,而是 Node.js、Python Flask/Django、Go 等需要自己监听特定端口(如 3000, 5000, 8080)的服务,那么就不能直接用 root 指令,而要用 proxy_pass。

场景举例:

  • 前端 Vue 项目打包后放 Nginx 静态托管(端口 80)
  • 后端 Java/Node 服务监听在 8080
  • 另一个独立的小工具监听在 9000

Nginx 配置示例 (reverse-proxy.conf):

# 主站点
server {
    listen 80;
    server_name main.example.com;

    location / {
        proxy_pass http://127.0.0.1:3000; # 转发给 Node.js
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

# 第二个站点
server {
    listen 80;
    server_name tool.example.com;

    location / {
        proxy_pass http://127.0.0.1:9000; # 转发给另一个服务
        proxy_set_header Host $host;
    }
}

这种方式的好处是,你可以随意更换后端语言或框架,只要它监听本地端口,Nginx 就能把它XX出去。


关键注意事项(避坑指南)

  1. 防火墙与安全组:
    轻量服务器通常自带“安全组”策略。除了放行 80/443 端口,如果你用了自定义端口(比如数据库 3306、Redis 6379),千万不要直接对 0.0.0.0 开放!务必限制来源 IP,或者干脆不暴露,只通过内网通信。

  2. 内存优化:
    轻量服务器配置通常不高(比如 1核 2G)。如果并发量大,Nginx 的 worker_processes 默认设为 auto 即可。如果发现 OOM(内存溢出),可以调整 worker_connections 和 PHP-FPM 的 pm.max_children。对于小站,PHP-FPM 的进程数别开太大,5-10 个足够。

  3. 文件权限:
    很多站长遇到“502 Bad Gateway”或“403 Forbidden”,90% 是因为文件权限不对。

    • Web 目录所有者建议设置为 www-data (Ubuntu) 或 nginx (CentOS)。
    • 命令:chown -R www-data:www-data /var/www/*
    • 目录权限 755,文件权限 644。
  4. 备份与迁移:
    轻量服务器的优势是便宜,劣势是磁盘可能不大。定期备份数据库(mysqldump)和网站源码(tar 打包)到对象存储(COS/OSS)或其他地方。不要把所有鸡蛋放在一个篮子里。

  5. 关于宝塔面板(Baota Panel):
    如果你不熟悉命令行,宝塔面板确实是个神器。它在轻量服务器上部署非常简单,图形化界面添加站点、配置 SSL、设置伪静态都非常直观。

    • 缺点:占用额外内存(约 100-200MB),后台进程较多。
    • 建议:如果是纯技术爱好者或追求极致性能,用原生 Nginx;如果是运维精力有限、追求快速上线,装宝塔完全没问题,国内生态支持极好。

总结

在轻服务器上多站点共存,本质就是 Nginx 的多 Server 块配置。

  • 静态站/WordPress -> 用 root + server_name 方案。
  • 动态后端/API -> 用 proxy_pass 方案。
  • 怕麻烦 -> 装宝塔面板,点点鼠标就行。

只要合理规划资源,一台轻量服务器完全可以成为你个人项目的“全能主机”。