在轻量应用服务器(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出去。
关键注意事项(避坑指南)
-
防火墙与安全组:
轻量服务器通常自带“安全组”策略。除了放行 80/443 端口,如果你用了自定义端口(比如数据库 3306、Redis 6379),千万不要直接对 0.0.0.0 开放!务必限制来源 IP,或者干脆不暴露,只通过内网通信。 -
内存优化:
轻量服务器配置通常不高(比如 1核 2G)。如果并发量大,Nginx 的 worker_processes 默认设为auto即可。如果发现 OOM(内存溢出),可以调整worker_connections和 PHP-FPM 的pm.max_children。对于小站,PHP-FPM 的进程数别开太大,5-10 个足够。 -
文件权限:
很多站长遇到“502 Bad Gateway”或“403 Forbidden”,90% 是因为文件权限不对。- Web 目录所有者建议设置为
www-data(Ubuntu) 或nginx(CentOS)。 - 命令:
chown -R www-data:www-data /var/www/* - 目录权限 755,文件权限 644。
- Web 目录所有者建议设置为
-
备份与迁移:
轻量服务器的优势是便宜,劣势是磁盘可能不大。定期备份数据库(mysqldump)和网站源码(tar 打包)到对象存储(COS/OSS)或其他地方。不要把所有鸡蛋放在一个篮子里。 -
关于宝塔面板(Baota Panel):
如果你不熟悉命令行,宝塔面板确实是个神器。它在轻量服务器上部署非常简单,图形化界面添加站点、配置 SSL、设置伪静态都非常直观。- 缺点:占用额外内存(约 100-200MB),后台进程较多。
- 建议:如果是纯技术爱好者或追求极致性能,用原生 Nginx;如果是运维精力有限、追求快速上线,装宝塔完全没问题,国内生态支持极好。
总结
在轻服务器上多站点共存,本质就是 Nginx 的多 Server 块配置。
- 静态站/WordPress -> 用
root + server_name方案。 - 动态后端/API -> 用
proxy_pass方案。 - 怕麻烦 -> 装宝塔面板,点点鼠标就行。
只要合理规划资源,一台轻量服务器完全可以成为你个人项目的“全能主机”。
云技术博客