CodeGym /课程 /Docker SELF /虚拟主机配置

虚拟主机配置

Docker SELF
第 7 级 , 课程 1
可用

1. 什么是虚拟主机?

想象一下,你开了一家很舒服的小咖啡店。大部分客户来买咖啡 ☕,但有时候有人想喝茶 🍵。与其为茶爱好者开一家新店,你只是为他们分出一个小角落。在Web服务器的世界里,这个概念叫做虚拟主机。它允许你的服务器处理多个网站(用不同域名),但只用一个物理服务器。

虚拟主机类型

  1. 基于IP地址 — 每个网站都有自己唯一的IP地址。这就像演唱会的VIP区域:每个有VIP票的客户都有自己的座位。
  2. 基于域名 — 多个网站可以共享一个IP地址。这种情况下,服务器会用客户请求中的主机名(域名)来理解应该展示哪个网站。这是大部分项目里更常见、更方便的选项。

2. 在Nginx中配置虚拟主机

1. 创建新虚拟主机

为了配置虚拟主机,首先需要创建一个配置文件。这个文件将包含服务器如何处理特定域名请求的信息。

创建我们网站的文件,比如example.com:

sudo nano /etc/nginx/sites-available/example.com

添加以下配置块:

server {
    listen 80;
    server_name example.com www.example.com;

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

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

逐部分解释代码:

  • listen 80;: 指定服务器将监听80端口(默认用于HTTP)。
  • server_name example.com www.example.com;: 定义服务器应该响应哪些域名。
  • root /var/www/example.com;: 指令指定存放网站文件的根目录。
  • index index.html;: 指定将用作网站“主页”的文件。
  • location / { try_files $uri $uri/ =404; }: 配置请求路由。如果找不到文件或目录,则返回404错误。

2. 激活配置

现在需要“启用”我们的虚拟主机。在Nginx中通过符号链接实现:

sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/

然后检查配置是否没有错误:

sudo nginx -t

如果一切正常,重新加载服务器:

sudo systemctl reload nginx

3. 验证工作

创建网站文件的文件夹:

sudo mkdir -p /var/www/example.com
sudo nano /var/www/example.com/index.html

添加以下简单HTML代码:

<h1>欢迎来到example.com!</h1>
<p>您的Nginx服务器已准备好提供服务。</p>

保存文件,然后用浏览器打开: http://example.com。如果看到欢迎消息,则表示虚拟主机正常工作!

4. Linux中的符号链接

符号链接(或软链接, symlinks)是指向另一个文件或目录的特殊文件对象。它们就像Windows中的“快捷方式”,允许通过替代路径访问目标文件或目录。

符号链接包含到原始对象的路径,而不是对象本身。如果原始文件或目录被移动或删除,链接将变成“断开的”,因为它不再指向现有对象。

创建符号链接的命令:

ln -s target link_name
  • target — 指向原始对象的路径。
  • link_name — 链接的名称。

示例:

ln -s /var/log/syslog log_link

现在可以通过log_link访问文件/var/log/syslog

用途:

  • 简化导航。
  • 创建对文件的替代访问点。
  • 组织目录结构。

3. 在 Apache 中配置虚拟主机

1. 创建配置文件

Apache 使用不同的方法。虚拟主机的配置文件位于 /etc/apache2/sites-available/ 文件夹中。为我们的网站创建一个文件:

sudo nano /etc/apache2/sites-available/example.com.conf

添加以下代码:

<VirtualHost *:80>
    ServerName example.com
    ServerAlias www.example.com

    DocumentRoot /var/www/example.com
    <Directory /var/www/example.com>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

简单解释:

  • <VirtualHost *:80>: 指定配置适用于所有 80 端口的请求。
  • ServerNameServerAlias: 定义主域名和额外的域名。
  • DocumentRoot: 指定网站的根文件夹。
  • <Directory>: 定义指定文件夹的权限和行为的块。

2. 启用配置

要启用配置,请使用命令:

sudo a2ensite example.com.conf

重新启动服务以使更改生效:

sudo systemctl restart apache2

3. 检查是否有效

继续,创建文件夹和文件:

sudo mkdir -p /var/www/example.com
sudo nano /var/www/example.com/index.html

填入以下内容:

<h1>欢迎来到 example.com on Apache!</h1>

保存后,打开浏览器访问:http://example.com。如果你看到欢迎页面——恭喜,你已经在 Apache 中配置了虚拟主机!


4. 检查和管理多个主机

配置第二个虚拟主机

假设你想为第二个网站服务:test.com。步骤和之前一样:

  1. 创建新的配置文件。
  2. 指定唯一的域名和根目录。
  3. 激活配置并重启服务器。

对于Nginx:

sudo nano /etc/nginx/sites-available/test.com
sudo ln -s /etc/nginx/sites-available/test.com /etc/nginx/sites-enabled/
sudo systemctl reload nginx

对于Apache:

sudo nano /etc/apache2/sites-available/test.com.conf
sudo a2ensite test.com.conf
sudo systemctl restart apache2

调试问题

如果你的虚拟主机无法工作,从检查错误开始。例如:

  • 对于Nginx:

      sudo tail -f /var/log/nginx/error.log
    
  • 对于Apache:

      sudo tail -f /var/log/apache2/error.log
    

你还可以使用 curl 命令直接测试网站:

curl -I http://example.com

现在你已经可以配置虚拟主机并在一台服务器上运行多个网站了。同时你还可以配置HTTPS,让你的网站更安全。不过,这个话题会在下一次讲座中探讨!

1
任务
Docker SELF, 第 7 级, 课程 1
已锁定
创建并配置一个 Nginx 虚拟主机
创建并配置一个 Nginx 虚拟主机
1
任务
Docker SELF, 第 7 级, 课程 1
已锁定
激活虚拟主机并进行检查
激活虚拟主机并进行检查
1
任务
Docker SELF, 第 7 级, 课程 1
已锁定
在 Apache 中创建第二个虚拟主机
在 Apache 中创建第二个虚拟主机
1
任务
Docker SELF, 第 7 级, 课程 1
已锁定
管理多个虚拟主机
管理多个虚拟主机
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION