努力
加油

在轻量服务器上做多个网站,需要怎么设置域名和端口?

在轻量应用服务器(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+。

第一步:前置准备(别跳过)

  1. 解析域名:
    • 确保你的域名 A 记录指向了轻量服务器的公网 IP。
    • 如果有多个网站(比如 site1.com 和 site2.net),两个域名的 A 记录都要指向同一个 IP。
  2. 安全组配置:
    • 登录云厂商控制台,找到“防火墙”或“安全组”。
    • 放行 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 免费证书。

  1. 安装 Certbot

    # CentOS
    sudo yum install certbot python2-certbot-nginx -y
    # Ubuntu
    sudo apt install certbot python3-certbot-nginx -y
  2. 获取证书
    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),以及是否接受条款。

  3. 验证
    再次访问 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 端口,对用户透明。

常见问题与避坑指南

  1. 为什么我配了域名还是访问不了?

    • 检查域名是否生效:ping site1.com 看返回的 IP 是否是你的服务器 IP。
    • 检查 Nginx 错误日志:tail -f /var/log/nginx/error.log。
    • 检查 SELinux(CentOS 默认开启):如果权限被拒,可能需要执行 setsebool -P httpd_can_network_connect 1 或者调整文件上下文。
  2. 能不能用不同端口?

    • 技术上可以(比如 site1 配 80,site2 配 8080),但极度不推荐。用户必须手动输入 http://site2.com:8080,移动端体验极差,且无法申请标准 SSL 证书(Let’s Encrypt 只支持 80/443 验证)。
  3. 轻量服务器内存不够怎么办?

    • 如果只有 1核 1G 内存,同时跑多个重型应用(如多个 Java 项目)会很卡。
    • 解决方案:
      • 尽量使用静态站点或轻量级框架。
      • 使用 Docker 限制每个容器的内存使用。
      • 考虑升级带宽和内存,或者迁移到 ECS/CVM 等更灵活的实例。
  4. 云厂商自带的“建站套餐”能用吗?

    • 阿里云、腾讯云等都有“轻量应用服务器建站镜像”(如 WordPress 一键安装包)。
    • 优点:傻瓜式操作,自带 LAMP/LNMP 环境。
    • 缺点:扩展性差,想加第二个网站时需要手动去后台改 Nginx 配置,容易出错。
    • 建议:新手可以先用镜像跑通第一个网站,熟悉 Linux 基本操作后,再按照上述 Nginx 手动配置的方式添加第二个网站,这样更可控,也便于后续维护。

总结

在轻量服务器上做多网站,不需要设置不同端口。

正确姿势是:

  1. 所有域名解析到同一 IP。
  2. 在 Nginx 中为每个域名编写独立的 server 块,监听相同的 80/443 端口。
  3. 利用 server_name 区分域名。
  4. 通过 Certbot 统一或分别管理 SSL 证书。

这样既专业,又符合互联网最佳实践,用户体验也是最好的。