如何排除常见的 Nginx 错误

介绍

您可以使用几种方法来解决 Nginx 错误. 请记住,这些错误解决方法是作为一个起点的,并需要进一步的调查来诊断问题的根本原因。

本教程将审查以下命令,这些命令通常用于在大多数 Linux 发行版中解决 Nginx 问题:

  • sudo cat /var/log/nginx/error.log:用来打印一个记录,列出错误的列表和有关错误的细节。
  • sudo nginx -t:用来检查配置文件中的语法错误。
  • systemctl status nginx:用来检查您的 Nginx 服务是否活跃或不活跃。

您将了解更多有关这些命令以及如何使用它们来解决各种 Nginx 错误。

与错误日志的故障解决

当您收到来自 Nginx 的错误时,并不总是清楚问题是什么。 出于这个原因,一个错误可以连接到一个较大的问题或一个单独的问题。 取决于您的具体情况,设置可能会有所不同。 要获得 Nginx 错误的完整概述,请运行以下命令以获取运行列表:

1sudo cat /var/log/nginx/error.log

您必须作为特权用户运行此命令. 我们建议使用sudo功能的用户而不是 root用户。cat命令代表concatenate,用于读取文件的内容并在终端输出中打印它。在这种情况下,cat正在读取和打印/var/log/nginx/error.log文件的内容。当您运行此命令时,您的输出将返回错误列表。请记住,如果没有错误,您的提示将保持空白。

12022/11/28 23:58:22 [emerg] 168641#168641: invalid host in "[::]443" of the "listen" directive in /etc/nginx/sites-enabled/test.do-community.com:12
22022/11/28 23:59:44 [emerg] 168664#168664: invalid number of arguments in "root" directive in /etc/nginx/sites-enabled/test.do-community.com:4
32022/11/29 00:00:19 [emerg] 168701#168701: "server" directive is not allowed here in /etc/nginx/sites-enabled/test.do-community.com:6

此错误日志输出提供有关您遇到的特定错误的关键信息。本日志项的第一部分详细介绍了错误发生的日期和时间以及错误消息的类型。

总的来说,查看您的 Nginx 错误日志是有帮助的,如果您想要更多关于您可能收到的错误(s)的背景。

检查语法错误

与 Nginx 最常见的错误之一与配置文件中的语法有关. 无论是缺少字符还是错误的语法结构,如果语法不正确,它不会起作用. 这是因为配置文件由各种指令组成,必须正确声明,或者它们将无效。 要检查是否有任何语法错误,请运行以下命令:

1sudo nginx -t

这个命令应该由一个特权用户运行,我们建议一个具有sudo功能的用户,而不是 root用户。 此外,t标志意味着它将在实际运行之前测试文件。

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

否则,您将收到类似于我们共享的错误日志示例的错误消息,如果出现语法错误,输出可能会返回以下内容:

1[emerg] invalid host in "[::]443" of the "listen" directive in /etc/nginx/sites-enabled/test.do-community.com:12
2nginx: configuration file /etc/nginx/nginx.conf test failed

我们建议始终运行这个语法命令,以验证您的配置文件中没有任何缺失或无效的内容。 此外,在进行任何配置更改后,您应该始终运行sudo systemctl reload nginx

解决systemctl status nginx的问题

在修复 Nginx 错误时,另一种选择是检查该服务是否活跃并在您的系统上工作. 安装可能不完整,或者服务可能没有启动。

1systemctl status nginx

如果您的服务正在运行,它将在您的输出中读取为活跃(运行):

 1nginx.service - A high performance web server and a reverse proxy server
 2     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; preset: enable>
 3     Active: active (running) since Tue 2022-11-29 16:37:49 UTC; 29s ago
 4       Docs: man:nginx(8)
 5    Process: 2679 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_proce>
 6    Process: 2680 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (c>
 7   Main PID: 2787 (nginx)
 8      Tasks: 2 (limit: 1116)
 9     Memory: 3.3M
10        CPU: 32ms
11     CGroup: /system.slice/nginx.service
12             ├─2787 "nginx: master process /usr/sbin/nginx -g daemon on; master>
13             └─2790 "nginx: worker process"

如果您的服务不运行,它将在输出中读取为不活跃(死):

 1 nginx.service - A high performance web server and a reverse proxy server
 2     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; preset: enable>
 3     Active: inactive (dead) since Tue 2022-11-29 16:42:27 UTC; 1s ago
 4   Duration: 4min 38.006s
 5       Docs: man:nginx(8)
 6    Process: 2679 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_proce>
 7    Process: 2680 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (c>
 8    Process: 2915 ExecStop=/sbin/start-stop-daemon --quiet --stop --retry QUIT/>
 9   Main PID: 2787 (code=exited, status=0/SUCCESS)
10        CPU: 39ms

如果发生这种情况,您可能需要重新启动您的 Nginx 服务,您可以使用以下命令:

1sudo systemctl restart nginx

之后,您可以运行systemctl status nginx来验证您的服务再次活跃. 如果您有兴趣了解更多关于这些基本的管理命令,请阅读我们的教程,在那里我们讨论了 如何管理 Nginx 流程

其他故障解析技巧

虽然我们只审查了三种方法来解决 Nginx 错误,但这里还有几个例子,这些例子是针对防火墙和配置设置的。

调整防火墙设置

当您设置 Nginx 时,您的服务器默认设置为端口 80 HTTP 流量. 如果您没有这个端口打开以接收这些请求,那么您的网站将无法正常工作. 根据您的部署,调整防火墙设置可能会有所不同。

1sudo ufw status

再次,您需要具有特权的用户,并建议使用sudo功能的用户而不是 root用户. 如果您的输出返回以下内容,则意味着您已打开适当的端口 80’,具体列出了Nginx HTTP`配置文件:

1Status: active
2
3To Action From
4--                         ------      ----
5OpenSSH ALLOW Anywhere
6Nginx HTTP ALLOW Anywhere
7OpenSSH (v6)               ALLOW Anywhere (v6)
8Nginx HTTP (v6)            ALLOW Anywhere (v6)

如果您需要打开额外的端口,例如443,以允许HTTPS流量,那么您可以将规则添加到列表中:

1sudo ufw allow 'Nginx HTTPS'

或者,您可以使用单个配置文件Nginx Full添加两个规则:

1sudo ufw allow 'Nginx Full'

要验证您的端口是开放的,运行sudo ufw状态再次,如果它们列出,那么你已经准备好去。

检查配置文件

如果您正在使用 Nginx 网页服务器,您可能已经设置了服务器封锁,特别是如果您遵循了我们在 How To Install Nginx上的教程)。

 1[label /etc/nginx/sites-available/your_domain]
 2server {
 3       listen 80;
 4         listen [::]:80;
 5
 6       root /var/www/your_domain/html;
 7        index index.html index.htm index.nginx-debian.html;
 8
 9        server_name your_domain www.your_domain;
10
11        location / {
12                try_files $uri $uri/ =404;
13        }
14}

当您添加或更新配置文件时,请始终记住在完成时保存。如果您使用nano文本编辑器,您可以通过按CTRL + X,Y,然后ENTER来做到这一点。解决配置文件中的任何问题的主要方法是运行sudo nginx -t语法检查,并通过sudo systemctl restart nginx重新启动nginx来启用这些更改。

您可以随时通过使用您喜爱的文本编辑器打开配置文件来评估配置文件,如下文:

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

请记住,你有或添加到此文件的任何指令都必须准确,否则你会收到一个错误消息,即某些东西是无效的。

结论

本教程提供了一个快速的参考指南,如何解决您可能遇到的常见错误与 Nginx. 正如您所记得的那样,这些命令为诊断问题提供了第一步,但您可能需要进一步调查错误。

Published At
Categories with 技术
Tagged with
comments powered by Disqus