1. 什么是虚拟主机?
想象一下,你开了一家很舒服的小咖啡店。大部分客户来买咖啡 ☕,但有时候有人想喝茶 🍵。与其为茶爱好者开一家新店,你只是为他们分出一个小角落。在Web服务器的世界里,这个概念叫做虚拟主机。它允许你的服务器处理多个网站(用不同域名),但只用一个物理服务器。
虚拟主机类型
- 基于IP地址 — 每个网站都有自己唯一的IP地址。这就像演唱会的VIP区域:每个有VIP票的客户都有自己的座位。
- 基于域名 — 多个网站可以共享一个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 端口的请求。ServerName和ServerAlias: 定义主域名和额外的域名。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。步骤和之前一样:
- 创建新的配置文件。
- 指定唯一的域名和根目录。
- 激活配置并重启服务器。
对于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,让你的网站更安全。不过,这个话题会在下一次讲座中探讨!
GO TO FULL VERSION