Nginx,发音为 “engine x”,是一个开源的高性能 HTTP 和反向代理服务器。它负责处理一些互联网上最大网站的流量负载,可以作为独立的 web 服务器、负载均衡器、内容缓存,以及 HTTP 和非 HTTP 服务器的 反向代理 使用。
在 Nginx 中,服务器块(server block)是一种指令,用来定义特定域名的设置,这使得你可以在一台服务器上运行多个网站。对于每个网站,你可以设定站点文档根目录(存放网站文件的目录),创建独立的安全策略,使用不同的 SSL 证书等。
这篇文章会教你如何在 Ubuntu 22.04 上设置 Nginx 服务器块,让你了解如何在一个服务器上搭建多个网站,并根据你的需求定制每个网站的配置。
准备工作
开始之前,请确保满足以下条件:
- 你的域名已经指向了服务器的公网 IP 地址。
- 已经在你的 Ubuntu 系统上 安装了 Nginx。
- 你以 root 用户或者有 sudo 权限的用户 登录到系统。
值得一提的是,在某些关于 web 服务器的文章中,“服务器块”也被称为“虚拟主机”。这是 Apache 中的一个术语。
创建目录结构
文档根目录是存储和响应请求时提供的域名对应的网站文件的地方。你可以将文档根目录设置为你想要的任何位置。在这个例子中,我们将使用如下目录结构:
/var/www/
├── domain1.com
│ └── public_html
├── domain2.com
│ └── public_html
首先,为你的域名 创建根目录:
sudo mkdir -p /var/www/domain1.com/public_html
接下来,在域的根目录下创建一个 index.html
文件,当你在浏览器中访问该域名时,这个文件将会显示为默认页面。
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title>欢迎来到 domain1.com</title>
</head>
<body>
<h1>成功!domain1.com 的首页!</h1>
</body>
</html>
当以 sudo 用户执行命令时,新创建的文件和目录将归 root 用户所有。为了避免权限问题,你需要把域名文档根目录及其下的所有文件的所有权更改为 Nginx 用户 (www-data
) :
sudo chown -R www-data: /var/www/domain1.com
创建服务器块
在 Ubuntu 系统中,Nginx 服务器块的配置文件存储在 /etc/nginx/sites-available
目录中。可以通过创建到 /etc/nginx/sites-enabled
目录的符号链接来启用这些配置文件,Nginx 在启动时会读取该目录。
打开文本编辑器并创建下面的服务器块文件:
/etc/nginx/sites-available/domain1.com
server {
listen 80;
server_name domain1.com www.domain1.com;
root /var/www/domain1.com/public_html;
index index.html;
access_log /var/log/nginx/domain1.com.access.log;
error_log /var/log/nginx/domain1.com.error.log;
}
server_name
:匹配此服务器块配置的域名。root
:Nginx 提供域名文件的目录。access_log
,error_log
:指定日志文件的位置。
配置文件的名字可以是你喜欢的任何名字,但通常最好用域名来命名。
为了启用新的服务器块文件,从该文件创建一个指向 sites-enabled
目录的 符号链接,Nginx 启动时会读取这个目录:
sudo ln -s /etc/nginx/sites-available/domain1.com /etc/nginx/sites-enabled/
为了确保 Nginx 配置的语法正确,进行一次测试:
sudo nginx -t
如果没有错误,输出应该像这样:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
最后, 重启 Nginx 服务 使更改生效:
sudo systemctl restart nginx
要验证服务器块是否按预期工作,可以在你喜欢的浏览器中打开 http://domain1.com
,你应该会看到类似这样的页面:
总结
我们展示了如何创建 Nginx 服务器块,并在单个 Ubuntu 服务器上托管多个域名。你可以重复上述步骤,为所有域名创建额外的服务器块。现在,你已经掌握了在一台机器上运行多个网站的技能,是不是感觉超级棒呢?如果你有任何疑问或遇到困难,别忘了随时回来查阅这篇教程哦!