14. 在单台 Ubuntu 服务器上托管多个网站:实用技巧

简介

在单台 Ubuntu 服务器上托管多个网站是开发者、小企业和爱好者的经济实惠之选。本指南将带你逐步设置 虚拟主机 ,分别基于 Apache 和 Nginx ,以便在同一台服务器上托管多个网站。学完本教程,你将能够配置服务器以高效处理多个域名或子域名。


往期文章:

01. Ubuntu Server 入门 – SysOSX: AI & Cloud

02. 如何搭建你的第一台 Ubuntu 服务器:初学者指南 – SysOSX: AI & Cloud

03. 掌握 Ubuntu 服务器的 Linux 命令行 – SysOSX: AI & Cloud

04. 管理 Ubuntu 服务器上的用户和权限:全面指南 – SysOSX: AI & Cloud

05. Ubuntu 服务器网络基础:全面指南 – SysOSX: AI & Cloud

06. 在 Ubuntu 服务器上安装和管理软件:完整指南 – SysOSX: AI & Cloud

07.修补和更新 Ubuntu 服务器:全面指南 – SysOSX: AI & Cloud

08. 保护你的 Ubuntu 服务器:加固与防护的实用步骤 – SysOSX: AI & Cloud

09. Ubuntu 服务器审计与日志记录

10. Ubuntu 服务器系统监控工具:全面指南 – SysOSX: AI & Cloud

11. Ubuntu 服务器集中式日志记录:必读指南 – SysOSX: AI & Cloud

12. Ubuntu 服务器审计与合规:最佳实践 – SysOSX: AI & Cloud

13. 为托管和 Web 应用搭建 Ubuntu 服务器:终极指南 – SysOSX: AI & Cloud



前提条件

要学习本指南,请确保你具备:

  • 一台 Ubuntu 服务器(建议使用 20.04 或更高版本)。
  • 一个拥有 sudo 权限的用户帐户。
  • 多个指向你的服务器 IP 地址的域名。
  • Linux 命令的基础知识。

第 1 部分:使用 Apache 托管多个网站


第 1 步:安装 Apache Web 服务器

如果尚未安装 Apache,请运行以下命令:

sudo apt update && sudo apt install apache2 -y


第 2 步:为每个网站设置虚拟主机

Apache 使用虚拟主机从一台服务器提供多个网站服务。每个网站都有自己的虚拟主机配置文件。

为网站创建目录

  • 为每个网站创建单独的目录:
sudo mkdir -p /var/www/website1.com /var/www/website2.com
  • 将这些目录的所有权分配给你的用户帐户:
sudo chown -R $USER:$USER /var/www/website1.com /var/www/website2.com

创建虚拟主机配置文件

  • 为第一个网站创建配置文件:
sudo nano /etc/apache2/sites-available/website1.com.conf
  • 添加以下配置:
<VirtualHost *:80>
    ServerName website1.com
    ServerAlias www.website1.com
    DocumentRoot /var/www/website1.com
    ErrorLog ${APACHE_LOG_DIR}/website1_error.log
    CustomLog ${APACHE_LOG_DIR}/website1_access.log combined
</VirtualHost>

  • 为第二个网站创建配置文件:
sudo nano /etc/apache2/sites-available/website2.com.conf
  • 添加以下配置:
<VirtualHost *:80>
    ServerName website2.com
    ServerAlias www.website2.com
    DocumentRoot /var/www/website2.com
    ErrorLog ${APACHE_LOG_DIR}/website2_error.log
    CustomLog ${APACHE_LOG_DIR}/website2_access.log combined
</VirtualHost>

启用虚拟主机

  • 启用虚拟主机配置:
sudo a2ensite website1.com.conf
sudo a2ensite website2.com.conf
  • 重新加载 Apache 以应用更改:
sudo systemctl reload apache2

第 3 步:测试 Apache 配置

  • 为每个网站创建一个简单的 index.html 文件:
echo "<h1>Welcome to Website 1</h1>" > /var/www/website1.com/index.html
echo "<h1>Welcome to Website 2</h1>" > /var/www/website2.com/index.html


  • 在浏览器中访问 http://website1.com 和 http://website2.com 以验证设置。

第 4 步:使用 SSL/TLS 保护网站

安装 Certbot

安装带有 Apache 插件的 Certbot:

sudo apt install certbot python3-certbot-apache -y

获取 SSL 证书

为每个网站运行 Certbot:

sudo certbot --apache -d website1.com -d www.website1.com
sudo certbot --apache -d website2.com -d www.website2.com

Certbot 会自动为两个网站配置 SSL,并将 HTTP 流量重定向到 HTTPS。


第 2 部分:使用 Nginx 托管多个网站


第 1 步:安装 Nginx Web 服务器

如果尚未安装 Nginx,请运行:

sudo apt update && sudo apt install nginx -y


第 2 步:为每个网站设置服务器块

Nginx 使用服务器块(类似于 Apache 中的虚拟主机)从一台服务器提供多个网站服务。

为网站创建目录

  • 为每个网站创建单独的目录:
sudo mkdir -p /var/www/website1.com /var/www/website2.com
  • 将这些目录的所有权分配给你的用户帐户:
sudo chown -R $USER:$USER /var/www/website1.com /var/www/website2.com

创建服务器块配置文件

  • 为第一个网站创建配置文件:
sudo nano /etc/nginx/sites-available/website1.com

  • 添加以下配置:
server {
    listen 80;
    server_name website1.com www.website1.com;

    root /var/www/website1.com;
    index index.html;

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

    error_log /var/log/nginx/website1_error.log;
    access_log /var/log/nginx/website1_access.log;
}

  • 为第二个网站创建配置文件:
sudo nano /etc/nginx/sites-available/website2.com

  • 添加以下配置:
server {
    listen 80;
    server_name website2.com www.website2.com;

    root /var/www/website2.com;
    index index.html;

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

    error_log /var/log/nginx/website2_error.log;
    access_log /var/log/nginx/website2_access.log;
}

启用服务器块

  • 创建符号链接以启用服务器块:
sudo ln -s /etc/nginx/sites-available/website1.com /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/website2.com /etc/nginx/sites-enabled/

  • 测试 Nginx 配置:
sudo nginx -t
  • 重新加载 Nginx 以应用更改:
sudo systemctl reload nginx

第 3 步:测试 Nginx 配置

  • 为每个网站创建一个简单的 index.html 文件:
echo "<h1>Welcome to Website 1</h1>" > /var/www/website1.com/index.html
echo "<h1>Welcome to Website 2</h1>" > /var/www/website2.com/index.html

  • 在浏览器中访问 http://website1.com 和 http://website2.com 以验证设置。

第 4 步:使用 SSL/TLS 保护网站

安装 Certbot

安装带有 Nginx 插件的 Certbot:

sudo apt install certbot python3-certbot-nginx -y

获取 SSL 证书

为每个网站运行 Certbot:

sudo certbot --nginx -d website1.com -d www.website1.com
sudo certbot --nginx -d website2.com -d www.website2.com

Certbot 会自动为两个网站配置 SSL,并将 HTTP 流量重定向到 HTTPS。


参考资料

结论

在单台 Ubuntu 服务器上托管多个网站是管理 Web 应用或域名的实用且经济的方式。无论你使用 Apache 还是 Nginx,该过程都包括设置目录、配置虚拟主机或服务器块,以及使用 Certbot 通过 SSL/TLS 证书保护你的网站。按照本指南操作,你可以高效地托管多个域名或子域名,并确保服务器针对可扩展性和安全性进行了优化。

Apache 和 Nginx 都是强大的 Web 服务器,两者之间的选择通常取决于你的具体需求。Apache 提供丰富的配置选项和兼容性,而 Nginx 则在性能和处理并发连接方面表现出色。无论你选择哪一个,本指南都能为你提供有效管理多个网站的基础知识。


敬请期待下一个主题: 在 Ubuntu 服务器上管理存储和磁盘 在这篇即将发布的指南中,你将学习如何配置磁盘初始化、为不同文件系统创建分区,以及扩展磁盘(包括挂载到文件系统)。千万别错过!