如何在Debian 10上安装Nginx

介绍

Nginx是一款免费且开源的网络服务器,用于托管各种规模的网站和应用程序。该软件以对内存资源的低影响、高可伸缩性以及模块化、事件驱动的架构而闻名,可以提供安全、可预测的性能。Nginx不仅仅是一个网络服务器,还可以作为负载均衡器、HTTP缓存和反向代理使用。

在本指南中,您将在Debian 10服务器上安装Nginx。

先决条件

在开始本指南之前,您应该在服务器上配置一个常规的非root用户,并具有sudo特权。您还应该启用了一个活动的防火墙。您可以通过按照我们的Debian 10初始服务器设置指南进行设置。

步骤1 – 安装Nginx

Nginx可在Debian的默认软件存储库中找到,因此可以使用常规软件包管理工具进行安装。

首先更新本地软件包索引以反映最新的上游更改:

  1. sudo apt update

然后,安装nginx软件包:

  1. sudo apt install nginx

确认安装,输入Y,然后按Enter键继续。 apt将安装Nginx及其服务器所需的任何依赖项。

步骤2 – 调整防火墙

在测试Nginx之前,有必要修改防火墙设置以允许外部访问默认的Web端口。假设您已按照先决条件中的说明进行了操作,您应该已经配置了一个UFW防火墙来限制对服务器的访问。

在安装过程中,Nginx会向UFW注册自身,以提供一些应用程序配置文件,可用于通过防火墙启用或禁用对Nginx的访问。

通过键入以下命令列出ufw应用程序配置文件:

  1. sudo ufw app list

您应该会得到一个应用程序配置文件的列表:

Output
Available applications: ... Nginx Full Nginx HTTP Nginx HTTPS ...

正如您所见,有三个适用于Nginx的配置文件:

  • Nginx完整:此配置文件打开端口80(正常的,未加密的Web流量)和端口443(TLS/SSL加密流量)
  • Nginx HTTP:此配置文件仅打开端口80(正常的,未加密的Web流量)
  • Nginx HTTPS: 此配置仅打开端口443(TLS/SSL 加密流量)

建议您启用最严格的配置文件,只允许您配置的流量通过。由于在本指南中尚未为服务器配置 TLS/SSL,因此您只需要允许端口80上的 HTTP 流量。

您可以通过输入以下内容来启用此配置:

  1. sudo ufw allow 'Nginx HTTP'

您可以通过输入以下内容来验证更改:

  1. sudo ufw status

输出中显示的是允许的 HTTP 流量:

Output
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Nginx HTTP ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx HTTP (v6) ALLOW Anywhere (v6)

步骤 3 – 检查您的 Web 服务器

在安装过程结束时,Debian 10 启动 Nginx。Web 服务器应已启动并运行。

您可以使用 systemd init 系统检查服务是否正在运行,方法是输入以下内容:

  1. systemctl status nginx
Output
● nginx.service - A high performance web server and a reverse proxy server Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2022-06-28 18:42:58 UTC; 49s ago Docs: man:nginx(8) Main PID: 2729 (nginx) Tasks: 2 (limit: 1167) Memory: 7.2M CGroup: /system.slice/nginx.service ├─2729 nginx: master process /usr/sbin/nginx -g daemon on; master_process on; └─2730 nginx: worker process

此输出显示服务已成功启动。然而,测试的最佳方法是实际请求来自 Nginx 的页面。

您可以访问默认的 Nginx 欢迎页面,以确认软件是否正常运行,方法是导航至您服务器的 IP 地址。如果您不知道服务器的 IP 地址,可以在服务器的命令提示符下输入以下内容:

  1. ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'

您将收到几行返回信息。您可以在 Web 浏览器中尝试每个地址,以查看它们是否有效。

当您获得服务器的 IP 地址后,请在浏览器的地址栏中输入它:

http://your_server_ip

默认的Nginx欢迎页面应该出现在您的Web浏览器中:

此页面包含在Nginx中,以向您展示服务器是否正常运行。

步骤4 – 管理Nginx进程

现在您的Web服务器已经运行起来了,您可以查看一些基本的管理命令。

要停止您的Web服务器,请输入:

  1. sudo systemctl stop nginx

当服务器停止时,要启动Web服务器,请输入:

  1. sudo systemctl start nginx

要停止然后再次启动服务,请输入:

  1. sudo systemctl restart nginx

如果您正在进行配置更改,Nginx通常可以重新加载而不会断开连接。要执行此操作,请输入:

  1. sudo systemctl reload nginx

默认情况下,Nginx配置为在服务器引导时自动启动。如果这不是您想要的,请通过输入以下内容禁用此行为:

  1. sudo systemctl disable nginx

要重新启用服务以在引导时启动,请输入:

  1. sudo systemctl enable nginx

步骤5 – 设置服务器块(可选)

在使用Nginx Web服务器时,服务器块(类似于Apache中的虚拟主机)可用于封装配置细节,并在单个服务器上托管多个域。在以下命令中,将your_domain替换为您自己的域名。要了解如何使用DigitalOcean设置域名,请参阅我们的DigitalOcean DNS简介

Debian 10上的Nginx默认启用了一个服务器块,配置为从/var/www/html目录提供文档。虽然这对于单个站点效果很好,但如果您托管多个站点,则可能变得难以管理。不要修改/var/www/html,而是在/var/www中创建一个目录结构,用于your_domain网站,并将/var/www/html保留为默认目录,以便在客户端请求不匹配任何其他站点时提供服务。

按照以下方式创建your_domain的目录,使用-p标志创建任何必要的父目录:

  1. sudo mkdir -p /var/www/your_domain/html

接下来,使用$USER环境变量分配目录的所有权,该变量应该引用您当前的系统用户:

  1. sudo chown -R $USER:$USER /var/www/your_domain/html

如果您没有修改umask值,则您的Web根目录的权限应该是正确的,但您可以通过键入以下命令进行确认:

  1. sudo chmod -R 755 /var/www/your_domain

接下来,使用nano或您喜欢的文本编辑器创建一个示例index.html页面:

  1. nano /var/www/your_domain/html/index.html

在其中,添加以下示例HTML代码:

/var/www/your_domain/html/index.html
<html>
    <head>
        <title>Welcome to your_domain</title>
    </head>
    <body>
        <h1>Success! Your Nginx server is successfully configured for <em>your_domain</em>. </h1>
<p>This is a sample page.</p>
    </body>
</html>

完成后保存并关闭文件。在nano中,您可以按CTRL + X,然后Y,然后ENTER来完成。

为了让Nginx提供此内容,您必须创建一个带有正确指令的服务器块,指向您的自定义网站根目录。而不是直接修改默认配置文件,请在/etc/nginx/sites-available/your_domain创建一个新文件:

  1. sudo nano /etc/nginx/sites-available/your_domain

添加以下配置块,类似于默认配置,但针对您的新目录和域名进行了更新:

/etc/nginx/sites-available/your_domain
server {
        listen 80;
        listen [::]:80;

        root /var/www/your_domain/html;
        index index.html index.htm index.nginx-debian.html;

        server_name your_domain www.your_domain;

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

注意将root配置更新为您的新目录,并将server_name更新为您的域名。记得用您实际的域名替换your_domain

接下来,通过在sites-enabled目录中创建指向您自定义配置文件的符号链接来启用此服务器块,Nginx在启动期间会从中读取:

  1. sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/

您的服务器现在已经启用了两个服务器块,并配置为根据它们的listenserver_name指令响应请求(您可以在此处阅读更多关于Nginx如何处理这些指令的信息here):

  • your_domain:将响应your_domainwww.your_domain的请求。
  • default:将响应端口80上不匹配其他两个块的任何请求。

为了避免在配置中添加额外服务器名称可能出现的哈希桶内存问题,有必要调整 /etc/nginx/nginx.conf 文件中的一个值。打开文件:

  1. sudo nano /etc/nginx/nginx.conf

找到 server_names_hash_bucket_size 指令并去掉 # 符号以取消注释该行:

/etc/nginx/nginx.conf
...
http {
    ...
    server_names_hash_bucket_size 64;
    ...
}
...

完成后保存并关闭文件。

接下来,测试以确保您的 Nginx 文件中没有语法错误:

  1. sudo nginx -t

如果没有任何问题,以下是输出:

Output
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful

一旦您的配置测试通过,重新启动 Nginx 以使更改生效:

  1. sudo systemctl restart nginx

Nginx 现在应该正在为您的域名提供服务。您可以通过导航至 http://your_domain 进行测试。您在 /var/www/your_domain/html/index.html 文件夹中创建的自定义 HTML 应该在此处呈现:

第 6 步 – 熟悉重要的 Nginx 文件和目录

现在您已经知道如何管理 Nginx 服务本身,可以花一些时间熟悉一些重要的目录和文件。

内容

  • /var/www/html:实际的网页内容,默认情况下仅包含您之前看到的默认 Nginx 页面,存储在 /var/www/html 目录中。这可以通过修改 Nginx 配置文件来更改。

服务器配置

  • /etc/nginx:Nginx 配置目录。所有的 Nginx 配置文件都位于此目录中。
  • /etc/nginx/nginx.conf:主要的 Nginx 配置文件。可以修改此文件来更改 Nginx 的全局配置。
  • /etc/nginx/sites-available/:存储每个站点服务器块的目录。除非将其链接到 sites-enabled 目录,否则 Nginx 将不会使用此目录中找到的配置文件。通常,所有服务器块配置都在此目录中完成,然后通过链接到其他目录来启用。
  • /etc/nginx/sites-enabled/:存储已启用的每个站点服务器块的目录。通常,这些是通过链接到 sites-available 目录中找到的配置文件来创建的。
  • /etc/nginx/snippets:该目录包含可以在Nginx配置中的其他位置包含的配置片段。 可重复的配置段是重构为片段的良好候选。

服务器日志

  • /var/log/nginx/access.log:除非Nginx配置为不这样做,否则每个请求到您的Web服务器都会记录在此日志文件中。
  • /var/log/nginx/error.log:任何Nginx错误都将记录在此日志中。

结论

现在您已安装了您的Web服务器,您有许多选项可用于提供内容的类型以及可用于为用户创建更丰富体验的技术。

Source:
https://www.digitalocean.com/community/tutorials/how-to-install-nginx-on-debian-10