如何创建 Nginx 虚拟主机(服务器块)

服务器块,在 Nginx 中通常称为虚拟主机,允许您在一台服务器上托管多个网站,本文将教大家如何使用它们。

Nginx旨在处理单个服务器和 IP 地址上的多个域,换句话说,如果您有一台用作Web 服务器的服务器,并且它只分配了一个IP 地址,那么为了在服务器上运行多个网站或域,您可以使用 Nginx 虚拟主机。

在开始本教程之前,您需要安装 Nginx。

什么是虚拟主机?

这是一个Apache HTTP Server 术语,然而,Nginx 用户也经常使用它,事实上,Nginx 的正确术语是 server block

虚拟主机是一种在单个服务器上托管多个域名的方法。

虚拟主机如何工作?

当您在服务器上启动像 Nginx 这样的 Web 服务器软件时,该 Web 服务器将自己绑定到一个或多个网络端口,通常用于端口 80 和 443 的 Web 服务器。

现在,当计算机访问网站时,它将通过 Internet 向服务器发送请求,服务器将接收该请求。服务器要做的第一件事是查看请求发送到目标端口的端口。

接下来,它将使用该目标端口来确定将该信息转发到哪个应用程序,这意味着您的 Web 服务器只能有一个接收请求的应用程序。

但是,如果您想在同一 Web 服务器上托管两个不同的网站怎么办?

服务器需要能够判断数据包何时进入请求网站,它需要能够知道正在请求哪个网站,以便知道要发回哪些信息。

无论请求哪个网站,服务器都不能仅使用端口号和目标端口来确定客户端尝试访问哪个网站,服务器要做的就是说“我要向 Nginx 发送这个请求”,然后 Nginx 必须从那里决定它要发回什么。

Nginx 有一个叫做server blocks的概念,服务器块实际上可以用于两种不同的事情,它们可用于根据请求的 IP 地址为不同的网站提供服务,也可用于根据正在使用的域名为不同的网站提供服务。

因此,当您输入网站名称时www.example.com,当服务器收到该名称时,Nginx 实际上可以查看请求的服务器名称的 HTTP 标头内部,然后根据其配置的虚拟主机,决定存储哪个目录网站文件,并根据服务器名称将正确的响应返回给客户端。

如何创建 Nginx 虚拟主机(服务器块)

我们可以在两个目录中创建和存储我们的虚拟主机配置文件,它们都位于/etc/nginx目录中,这两个目录的名称是sites-available和sites-enabled。

  • /etc/nginx/sites-available: 定义单个虚拟主机(网站)的目录。请记住,Nginx 不会使用在此目录中找到的配置文件,除非它们链接到该 /etc/nginx/sites-enabled 目录。
  • /etc/nginx/sites-enabled:由 Nginx 主动提供服务的虚拟主机(网站)列表。

您可能想知道为什么我们需要两个目录来存储我们的虚拟主机文件?

这样做的主要好处是我们可以在 Nginx 服务器上创建许多虚拟主机文件,但我们可以根据我们的要求启用它们。

现在,我们将创建虚拟主机文件以在 Nginx 服务器中托管具有多个域的多个站点,域名为 website1.com 和 website2.com。

1. 创建目录结构

我们需要做的第一件事是为每个虚拟主机创建一个目录来存储不同的网站内容,我们将这些目录放在其中 /var/www ,并以每个域名命名。

运行以下命令来创建目录:

sudo mkdir -p /var/www/website1.com
sudo mkdir -p /var/www/website2.com

Nginx 虚拟主机目录结构

-p 上面命令中的 标志告诉 mkdir 在此过程中创建任何必要的父目录。

2. 为每个网站创建测试页面

接下来,出于演示目的,让我们index.html 在域的文档根目录中创建一个 文件,以便我们可以显示一些内容。

sudo vim /var/www/website1.com/index.html

粘贴以下几行:

Welcome to Website 1!Welcome to Website 1!

现在对 website2.com 重复上述步骤。

sudo vim /var/www/website2.com/index.html

粘贴以下几行:

Welcome to Website 2!Welcome to Website 2!

3.创建Nginx虚拟主机(Server Block)

要在sites-available目录中创建 Nginx 虚拟主机文件,请执行以下命令:

sudo vim /etc/nginx/sites-available/website1.com

需要注意的是,Nginx 虚拟主机配置文件可以任意命名,但通常情况下,使用域名是一个好习惯。

现在,将以下内容粘贴到您的虚拟主机文件中:

server {
    listen 80;
    server_name website1.com www.website1.com;
    root /var/www/website1.com;

    access_log /var/log/nginx/website1-access.log;
    error_log /var/log/nginx/website1-error.log;
}

为了让事情更清楚,让我们分解这个语法。以下是每个参数的含义:

  • listen: 指定 Nginx 服务器在哪个端口上侦听连接。
  • server_name: 在这里,我们匹配对我们域的请求。该指令包含我们要用于访问我们网站的域名列表。
  • root:我们存储网站文件的目录的位置。
  • error_log:我们存储此虚拟主机的所有错误日志的日志文件的完整路径。
  • access_log:我们存储此虚拟主机的所有访问日志的日志文件的完整路径。

现在我们可以使用我们的初始虚拟主机配置作为我们第二个文件的基础,只需复制它以创建一个新文件:

sudo cp /etc/nginx/sites-available/website1.com /etc/nginx/sites-available/website2.com

打开新文件并调整它以匹配我们的第二个 ( website2.com) 域名:

sudo vim /etc/nginx/sites-available/website2.com
server {
    listen 80;
    server_name website2.com www.website2.com;
    root /var/www/website2.com;

    access_log /var/log/nginx/website2-access.log;
    error_log /var/log/nginx/website2-error.log;
}

4. 启用 Nginx 虚拟主机(服务器块)

在测试之前我们需要做的最后一件事是启用虚拟主机,我们可以通过创建从文件到sites-enabled 目录的符号链接来做到这一点 :

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/

如下图所示,这些文件现在已链接到sites-enabled目录中。

将 Nginx 配置文件链接到启用站点的目录中

在我们继续之前,让我们仔细检查一下是否有任何错别字。测试 Nginx 配置的正确语法:

sudo nginx -t

最后,如果没有发现问题,重启 Nginx 服务以应用更改:

sudo systemctl restart nginx

5. 测试虚拟主机(可选)

为了测试 Nginx 虚拟主机,我们首先需要将我们的域名记录指向服务器的 IP 地址,在我们的例子中,服务器 IP 地址是192.168.122.101.

如果您使用的是Linux,请使用以下命令在您的台式电脑(您将执行测试的电脑)上打开该/etc/hosts文件:

sudo vim /etc/hosts

并如下图一一添加虚拟域名。

完成后保存并关闭文件。以这种方式进行将允许我们测试我们实际上并不拥有的域。

现在打开浏览器www.website1.com和www.website2.com一一输入,您将分别看到两个域的索引页面。

您已经成功地使用 Nginx 配置了两个独立的域。

6. 禁用 Nginx 虚拟主机(服务器块)

要在 Nginx 中禁用虚拟主机,我们只需要删除我们在启用虚拟主机文件时创建的符号链接,例如,要禁用website2.com,我们只需要执行以下命令:

sudo rm -rf /etc/nginx/sites-enabled/website2.com

要应用更改,我们必须重新启动 Nginx 服务器:

sudo systemctl restart nginx

结论

在本文中,向大家介绍了如何在单个 Linux 服务器上创建 Nginx 虚拟主机(服务器块)和托管多个域,要为另一个域创建虚拟主机,只需重复相同的步骤。

(0)

相关推荐

  • window nginx虚拟主机(多站点)配置教程

    nginx 目录结构 复制代码 代码如下: nginx-0.8.54 │ nginx.exe //主程序 │ ├─conf │ │ fastcgi_params │ │ koi-utf │ │ koi ...

  • 云服务器与虚拟主机有什么区别

    很多人都容易将云服务器与虚拟主机混为一谈,大致因为他们性能及安全性方便有不少相似的地方,那么云服务器与虚拟主机究竟有哪些明显区别呢? 操作方法 01 概念区分:云服务器是一种简单高效.安全可靠.处理能 ...

  • 如何使用免费虚拟主机创建网站

    前言: 好些其他专业的同事问建站难不难,其实建站并不难,关键是要看你创建什么样的网站.如果是一般的博客.个人站点,没有特殊要求的话,即使没有编程基础,也能轻松的创建一个网站. 简单来讲,建站=空间+建 ...

  • 云服务器和虚拟主机的区别

    相信很多选择云服务器或者虚拟主机的用户,也不知道这两者的区别,下面小编来给大家讲解下: 操作方法 01 虚拟主机是什么? 虚拟主机就是利用网络空间技术,把一台服务器分成许多的"虚拟" ...

  • 云服务器和云虚拟主机的区别?

    怎样区分虚拟主机.VPS主机和云服务器?首先说虚拟主机,共享主机也称虚拟主机,从互联网诞生至今,大部分站长都是从"共享主机"(shared hosting)开始学习建站的. 操作方 ...

  • 虚拟主机与独立服务器区别

    操作方法 01 先说一下两者的区别: 一.服务器有独立的IP.内存.硬盘和带宽.虚拟主机是共享的服务器的. 二.服务器可以安装各种操作系统.虚拟主机是在服务器上划出来的.只能与所在服务器系统保持一致. ...

  • 虚拟主机管理软件LuManager2.0正式版发布

    LuManager(LUM)是基于FreeBSD、Debian、Centos、Ubuntu、HttpOS等Linux/Unix系统的网站服务器管理软件,是目前国内市场上为数不多的同时支持Linux和U ...

  • Nginx搭建https服务器教程

    HTTPS简介 HTTPS(Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单来讲就是HTTP的安全版.即H ...

  • 虚拟主机管理程序ISPConfig-3.0.2.2 安装脚本,一键安装

    官网下载 http://www.ispconfig.org/ispconfig-3/download/ 此安装脚本装的是3.0.2.2,且是官方的最新版本 脚本下载 http://www.wdlinu ...