轻量服务器如何通过端口或域名区分运行两个网站?

在轻量应用服务器(如阿里云、腾讯云等厂商提供的产品)上部署两个网站,核心在于Web 服务器软件(Nginx/Apache)的配置。根据你拥有的资源(IP 地址数量、域名数量),主要有三种方案:基于域名的虚拟主机(最推荐)、基于端口的访问、以及基于 IP 的区分。

以下是详细的技术实现路径和操作步骤:

方案一:基于域名的虚拟主机(Virtual Hosts)—— 行业标准做法

这是最主流、最优雅的方式。只要你的轻量服务器有公网 IP,并且你拥有两个不同的域名(或子域名),就可以通过配置 Nginx 或 Apache,让同一个 IP 地址根据不同的 Host 头信息,将请求转发到不同的网站目录。

前提条件

  1. 轻量服务器已安装 Web 服务器(以 Nginx 为例,因其性能更好且配置更简洁)。
  2. 两个域名(例如 a.com 和 b.com)均已解析到该服务器的公网 IP。
  3. 两个网站的代码分别存放在服务器的不同目录下(例如 /var/www/site_a 和 /var/www/site_b)。

Nginx 配置步骤

  1. 创建站点目录

    mkdir -p /var/www/site_a/html
    mkdir -p /var/www/site_b/html
    # 放入各自的 index.html 测试文件
    echo "Site A" > /var/www/site_a/html/index.html
    echo "Site B" > /var/www/site_b/html/index.html
  2. 编写 Nginx 配置文件
    进入 Nginx 配置目录(通常在 /etc/nginx/conf.d/ 或 /etc/nginx/sites-available/),创建两个配置文件。

    文件 1: site_a.conf

    server {
       listen 80;
       server_name a.com www.a.com;
    
       root /var/www/site_a/html;
       index index.html index.htm;
    
       location / {
           try_files $uri $uri/ =404;
       }
    }

    文件 2: site_b.conf

    server {
       listen 80;
       server_name b.com www.b.com;
    
       root /var/www/site_b/html;
       index index.html index.htm;
    
       location / {
           try_files $uri $uri/ =404;
       }
    }
  3. 重载 Nginx 配置

    nginx -t          # 检查语法是否正确
    systemctl reload nginx  # 平滑重启,不中断服务
  4. 验证
    浏览器访问 http://a.com 显示 Site A,访问 http://b.com 显示 Site B。

注意:如果希望使用 HTTPS(443 端口),需为每个域名申请 SSL 证书,并在对应的 server 块中添加 listen 443 ssl; 及证书路径配置。


方案二:基于端口区分 —— 适用于无多域名或内部测试

如果你只有一个域名,或者不想进行复杂的 DNS 解析,可以通过监听不同的端口来区分服务。但这种方式用户体验较差,因为用户必须手动输入端口号(如 http://ip:8080)。

适用场景

  • 临时测试环境
  • 同一域名下需要暴露多个非标准服务
  • 没有备案域名或无法解析子域名

Nginx 配置示例

修改 Nginx 主配置或新建配置文件,监听不同端口:

# 网站 A 使用默认 80 端口
server {
    listen 80;
    server_name _; # 匹配所有未指定的域名
    root /var/www/site_a/html;
}

# 网站 B 使用 8080 端口
server {
    listen 8080;
    server_name _;
    root /var/www/site_b/html;
}

重要提醒:

  1. 防火墙/安全组设置:轻量服务器的云厂商控制台(如阿里云安全组、腾讯云防火墙)默认只开放 80 和 443 端口。你必须去云控制台手动添加规则,允许 TCP 协议的 8080 端口入站。
  2. 用户体验差:用户访问时必须带端口号,容易被误认为不安全链接。

方案三:基于 IP 区分 —— 仅适用于拥有多个公网 IP

如果你的轻量服务器购买了弹性公网 IP(EIP)并绑定了多个 IP,或者服务器本身有多个网卡/IP,可以通过绑定不同 IP 来区分。

配置方式

server {
    listen 192.0.2.1:80;  # 第一个 IP
    server_name _;
    root /var/www/site_a/html;
}

server {
    listen 192.0.2.2:80;  # 第二个 IP
    server_name _;
    root /var/www/site_b/html;
}

现实情况:大多数轻量应用服务器套餐只包含一个公网 IP,因此此方案在实际中较少用,除非你额外购买了 EIP。


关键注意事项与最佳实践

  1. 防火墙与安全组(重中之重)

    • 轻量服务器受两层保护:操作系统内部防火墙(如 iptables/firewalld)和云平台的安全组。
    • 务必在云控制台的安全组中放行对应端口(80/443 通常默认开放,8080 等需手动添加)。
    • 操作系统内建议启用 firewalld 或 ufw,仅开放必要端口。
  2. 权限问题

    • 确保 Nginx 运行用户(通常是 www-data 或 nginx)对网站目录有读取权限。
    • 可使用命令修复:chown -R www-data:www-data /var/www/site_*
  3. 静态资源缓存与性能

    • 对于静态网站,建议在 Nginx 中开启 gzip 压缩和 expires 缓存头,提升加载速度。
    • 若网站涉及动态内容(PHP/Python/Node.js),需配置反向X_X至后端服务(如 PHP-FPM、Gunicorn 等),此时需监听 Unix Socket 或本地回环地址(127.0.0.1:port)。
  4. HTTPS 强制跳转

    • 现代网站应强制使用 HTTPS。可在 Nginx 中配置:
      server {
       listen 80;
       server_name a.com;
       return 301 https://$host$request_uri;
      }
  5. 云服务器厂商限制

    • 国内主流云厂商(阿里云、腾讯云、华为云等)对轻量服务器有合规要求。所有对外提供服务的网站必须完成 ICP 备案,否则 80/443 端口可能被阻断。
    • 若未备案,可尝试使用非标准端口(如 8080)+ 自有域名,但存在被运营商封禁的风险,不建议用于生产环境。

总结建议

方案 优点 缺点 推荐指数
基于域名(Nginx Server Block) 专业、支持 HTTPS、无需用户记端口、SEO 友好 需多个域名 + 备案 ⭐⭐⭐⭐⭐
基于端口 配置简单、无需多域名 用户体验差、需开额外端口、易被拦截 ⭐⭐
基于 IP 隔离彻底 需多 IP、成本高、轻量机通常不支持 ⭐

最终建议:
请优先采用 方案一(基于域名的 Nginx 虚拟主机)。这是业界标准做法,稳定、安全、易于维护。确保你的两个域名都已正确解析并备案,然后在 Nginx 中为每个域名创建独立的 server 块即可。

未经允许不得转载:CLOUD云枢 » 轻量服务器如何通过端口或域名区分运行两个网站?