在轻量应用服务器(Lightweight Application Server)上部署多个网站,核心思路其实就一个:“一个 IP,多个域名,靠端口或反向XX区分”。
这里有个常见的误区需要澄清:如果你用的是标准的 HTTP (80) 和 HTTPS (443) 端口,你不需要也不应该为每个网站设置不同的端口号。通过配置 Nginx 或 Apache 的虚拟主机(Virtual Host),利用 SNI(Server Name Indication)技术,完全可以在同一个 IP 和端口上托管无数个域名。
下面我以目前最主流、性能最好的 Nginx + Docker/直接部署 方案为例,分步骤讲清楚怎么搞。假设你的轻量服务器是 CentOS 7/8 或 Ubuntu 20.04+。
第一步:前置准备(别跳过)
- 解析域名:
- 确保你的域名 A 记录指向了轻量服务器的公网 IP。
- 如果有多个网站(比如
site1.com和site2.net),两个域名的 A 记录都要指向同一个 IP。
- 安全组配置:
- 登录云厂商控制台,找到“防火墙”或“安全组”。
- 放行 80 (HTTP) 和 443 (HTTPS) 端口。
- 注意:除非你有特殊需求(比如内部测试),否则不要为了区分网站而开放 8080、8081 等端口给用户直接访问,那样体验极差且不安全。
第二步:安装并配置 Nginx
轻量服务器通常资源有限,Nginx 比 Apache 更省内存。
1. 安装 Nginx
# CentOS/RHEL
sudo yum install epel-release -y
sudo yum install nginx -y
sudo systemctl start nginx
sudo systemctl enable nginx
# Ubuntu/Debian
sudo apt update
sudo apt install nginx -y
sudo systemctl start nginx
sudo systemctl enable nginx
2. 创建网站目录结构
建议把不同网站的项目文件分开存放,方便管理。
sudo mkdir -p /var/www/site1/public_html
sudo mkdir -p /var/www/site2/public_html
# 放入你的 index.html 测试一下
echo "<h1>Site 1</h1>" | sudo tee /var/www/site1/public_html/index.html
echo "<h1>Site 2</h1>" | sudo tee /var/www/site2/public_html/index.html
3. 配置 Nginx 虚拟主机(关键步骤)
Nginx 的核心配置文件通常在 /etc/nginx/nginx.conf,但推荐的做法是在 /etc/nginx/conf.d/ 目录下为每个网站创建一个单独的 .conf 文件。
创建 site1 的配置:
sudo nano /etc/nginx/conf.d/site1.conf
内容如下:
server {
listen 80;
server_name site1.com www.site1.com; # 替换为你的实际域名
root /var/www/site1/public_html;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
# 如果有 PHP 项目,这里需要加上 php-fpm 的 fastcgi_pass 配置
}
创建 site2 的配置:
sudo nano /etc/nginx/conf.d/site2.conf
内容如下:
server {
listen 80;
server_name site2.net www.site2.net; # 替换为你的实际域名
root /var/www/site2/public_html;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
}
重要提示:
- 这两个配置都监听
80端口。 - Nginx 会根据请求头中的
Host字段(即用户输入的域名)自动路由到对应的root目录。 - 这就是为什么你不需要设置不同端口的原因。
4. 检查语法并重载
sudo nginx -t # 检查配置是否有错
sudo systemctl reload nginx # 平滑重启,不中断服务
此时,你在浏览器访问 site1.com 和 site2.net 应该能看到不同的页面了。
第三步:搞定 HTTPS(SSL 证书)
现在网站能访问了,但全是 HTTP,浏览器会提示“不安全”,而且不利于 SEO。对于轻量服务器,推荐使用 Certbot 自动申请 Let’s Encrypt 免费证书。
-
安装 Certbot
# CentOS sudo yum install certbot python2-certbot-nginx -y # Ubuntu sudo apt install certbot python3-certbot-nginx -y -
获取证书
Certbot 会自动修改 Nginx 配置,将 HTTP 重定向到 HTTPS,并插入 SSL 配置。sudo certbot --nginx -d site1.com -d www.site1.com sudo certbot --nginx -d site2.net -d www.site2.net注意:执行时它会问你邮箱,然后让你选择是否强制跳转 HTTPS(选 2),以及是否接受条款。
-
验证
再次访问https://site1.com,看看锁形图标是否出现。
第四步:进阶场景(如果你的网站是动态程序)
上面的例子是静态 HTML。如果你的网站是基于 WordPress、Node.js、Python Flask/Django 等动态程序,流程略有不同:
- WordPress (PHP): 你需要安装
php-fpm。在 Nginx 配置中,location ~ .php$部分需要指向unix:/run/php/php-fpm.sock或127.0.0.1:9000。 - Node.js/Go/Java: 这些应用通常运行在本地非标准端口(如 Node.js 跑在
3000)。你需要使用 Nginx 作为反向XX。- 修改
site1.conf中的location /部分:location / { proxy_pass http://127.0.0.1:3000; # 指向你的 Node 应用端口 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } - 这样,外部访问 80/443 端口,Nginx 转发给内部的 3000 端口,对用户透明。
- 修改
常见问题与避坑指南
-
为什么我配了域名还是访问不了?
- 检查域名是否生效:
ping site1.com看返回的 IP 是否是你的服务器 IP。 - 检查 Nginx 错误日志:
tail -f /var/log/nginx/error.log。 - 检查 SELinux(CentOS 默认开启):如果权限被拒,可能需要执行
setsebool -P httpd_can_network_connect 1或者调整文件上下文。
- 检查域名是否生效:
-
能不能用不同端口?
- 技术上可以(比如 site1 配 80,site2 配 8080),但极度不推荐。用户必须手动输入
http://site2.com:8080,移动端体验极差,且无法申请标准 SSL 证书(Let’s Encrypt 只支持 80/443 验证)。
- 技术上可以(比如 site1 配 80,site2 配 8080),但极度不推荐。用户必须手动输入
-
轻量服务器内存不够怎么办?
- 如果只有 1核 1G 内存,同时跑多个重型应用(如多个 Java 项目)会很卡。
- 解决方案:
- 尽量使用静态站点或轻量级框架。
- 使用 Docker 限制每个容器的内存使用。
- 考虑升级带宽和内存,或者迁移到 ECS/CVM 等更灵活的实例。
-
云厂商自带的“建站套餐”能用吗?
- 阿里云、腾讯云等都有“轻量应用服务器建站镜像”(如 WordPress 一键安装包)。
- 优点:傻瓜式操作,自带 LAMP/LNMP 环境。
- 缺点:扩展性差,想加第二个网站时需要手动去后台改 Nginx 配置,容易出错。
- 建议:新手可以先用镜像跑通第一个网站,熟悉 Linux 基本操作后,再按照上述 Nginx 手动配置的方式添加第二个网站,这样更可控,也便于后续维护。
总结
在轻量服务器上做多网站,不需要设置不同端口。
正确姿势是:
- 所有域名解析到同一 IP。
- 在 Nginx 中为每个域名编写独立的
server块,监听相同的 80/443 端口。 - 利用
server_name区分域名。 - 通过 Certbot 统一或分别管理 SSL 证书。
这样既专业,又符合互联网最佳实践,用户体验也是最好的。
云技术博客