常见的 Nginx 连接错误

简介

NGINX是一种流行的Web服务器,可以托管互联网上许多大型和高流量的站点。Nginx连接错误可能很难调试,因为有许多可能的原因和解决方案。此外,并不总是有很多提示可以为您指明正确的方向来修复错误。由于这些错误的本质是一开始就无法与Nginx建立连接,因此这些错误通常出现在浏览器级别,而不是作为Nginx级别的特定错误。事实上,Nginx的许多常见错误都与连接的某些方面有关,例如端口或防火墙。

本指南中的示例在Ubuntu 22.04服务器上进行了测试,但应该适用于大多数Nginx安装。尽管目录和路径可能略有不同,但大多数错误都可以在Nginx的标准化配置文件范围内解决。

在本教程中,您将了解浏览器连接错误对您的Nginx Web服务器意味着什么,以及您可以采取的各种步骤来确定和纠正该问题,以使您的服务器重新启动并运行。

检查Nginx错误日志

本教程中提供的错误和解决方案是常见情况,但不是详尽的。由于语法错误破坏了Nginx认可的有效语句的结构,因此以下错误仅是Nginx如何响应的指导原则。通常,一个错误可以级联到另一个错误中,错误可能是更大或独立问题的症状。您的具体情况和设置可能会有所不同。

请注意,您可以随时参考Nginx错误日志来查看错误的运行列表:

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

解决无法访问此站点的错误

当你在线浏览时,你可能会遇到一个网页,上面写着 无法访问该网站 。这个问题可能有很多原因,但本教程将从设置Nginx的用户的角度关注常见错误。有时刷新浏览器可以解决这个问题,但在您自己的Web服务器的情况下,可能会有其他因素影响您的服务器在后端的连接。

以下是您可能在Web浏览器上收到的错误消息示例:

![)

在我们开始之前,让我们先讨论一下这个错误对您的Web服务器有什么影响。首先,Example.com 地址响应时间太长,因此在消息末尾引用了** ERR_CONNECTION_TIMED_OUT** 。但是,请记住,这是一个浏览器级别的错误,而不是来自您的Nginx服务器的直接错误。可以将此错误消息解释为无法建立到服务器的连接的可能原因。此外,这里提出的解决方案是从客户端最终用户的角度给出的。

同样,这是一个运行自己的Web服务器的场景,而不是访问互联网上的任何给定网站。为了真正诊断你的问题,你必须通过一个可能原因的列表来检查你的Nginx设置。

由于您使用的是Nginx,您可以通过运行某些命令并检查您的防火墙和配置设置来评估可能导致此错误的几个项目。

验证您的Nginx Web服务器是否处于活动状态

您可以采取的第一步是验证Nginx在您的系统上是否处于活动状态,并且没有安装问题。您可以通过运行systemdinit系统来检查您机器上正在运行的nginx服务的状态来查看:

1systemctl status nginx

如果您的Nginx Web服务器运行正常,您将收到以下输出:

 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: active (running) since Thu 2022-11-03 16:37:22 UTC; 1 week 4 days >
 4       Docs: man:nginx(8)
 5   Main PID: 3253 (nginx)
 6      Tasks: 2 (limit: 1116)
 7     Memory: 3.7M
 8        CPU: 1.250s
 9     CGroup: /system.slice/nginx.service
10             ├─3253 "nginx: master process /usr/sbin/nginx -g daemon on; master>
11             └─3254 "nginx: worker process"

在输出中,有一行显示为Active,并表示Web服务器是否正在运行。在本例中,它已成功启动并运行。如果不是,此行将读作‘非活动(死)’。

<$>[备注] 注意: 如果您的输出返回inactive(Dead),您可能需要尝试使用sudo systemctl startnginx重新启动服务器。如果您最近做了任何配置更改,请务必通过运行sudo systemctl reload nginx重新加载,然后再次检查状态。你可以在我们的教程中了解到更多关于这一点的信息,该教程讨论了如何管理各种ngix processes. <$>

当您确认ngix服务正在运行后,您可以在浏览器中再次输入您的服务器地址http://example.com,以测试连接问题是否仍然存在。如果您不确定您的IP地址,可以使用icanhazip.com工具来定位您的IP地址:

1curl -4 icanhazip.com

如果此时仍然无法访问您的网站,则下一步是检查您的防火墙设置。

验证和调整您的防火墙设置

检查Web服务器连接的另一个步骤是验证您的防火墙设置是否已正确配置为通过适当的端口连接接受请求。如果不是,您需要调整您的防火墙设置以允许连接到该端口。默认情况下,Nginx Web服务器将侦听端口80上的任何传入请求,并在设置了SSL证书的情况下侦听端口443上的安全连接。但是,出于本教程的目的,我们将重点介绍默认端口80

在本例中,我们使用的是Ubuntu 22.04和简单的防火墙UFW。请注意,根据您的具体版本,这可能会有所不同。首先检查您的防火墙的当前设置。请记住,您必须以超级用户 用户权限运行以下命令。在这里,我们建议使用具有sudo权限的用户来执行此操作:

1sudo ufw status
1Status: active
2
3To Action From
4--                         ------      ----
5OpenSSH ALLOW Anywhere
6OpenSSH (v6)               ALLOW Anywhere (v6)

此输出列出此计算机上当前打开的端口连接。遗憾的是,端口80不在列表中,因此需要添加才能访问Nginx。如果您不确定有哪些应用配置,可以运行ufw app list

1sudo ufw app list
1Available applications:
2  Nginx Full
3  Nginx HTTP
4  Nginx HTTPS
5  OpenSSH

由于Nginx已成功安装,因此列出了各种可供配置的Nginx配置文件。以下是这些配置文件各自含义的快速概述:

  • Nginx Full:同时打开80(正常未加密流量)和443(TLS/SSL加密流量)端口
  • Nginx HTTP:只打开80端口
  • Nginx HTTPS:只打开端口443

由于您只需要打开80端口即可正确配置连接,因此您可以使用以下命令添加Nginx HTTP应用程序:

1sudo ufw allow 'Nginx HTTP'

<$>[注] 注意: 建议您在调整防火墙设置时,启用最严格的配置文件,以允许您配置的流量。这将取决于您的需求。在这个例子中,我们允许端口为80Nginx HTTP流量,但是如果你想了解更多关于如何为端口为443Nginx HTTPS设置它的信息,你可以在我们的Let's Encrypt保护Nginx的教程中阅读更多信息。 <$>

如果该命令执行成功,则返回ruleadded输出。若要确认Nginx HTTP应用已添加到列表中,请使用sudo UFW Status再次查看状态:

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)

此输出现在列出了已添加的Nginx HTTP应用程序,并且端口80已打开以接收连接。

验证您的Nginx配置文件

在测试您的Web浏览器之前,建议您检查您的配置设置,以确保您的服务器域阻止设置为监听端口80。在您的Nginx配置中设置适当的端口和IP地址是必不可少的,并且必须与防火墙中适当的开放端口配对。如果缺少任何组件,连接将失败。

您可以在首选的文本编辑器中打开Nginx配置文件。在这里我们使用nano

1sudo nano /etc/nginx/sites-available/example.com

打开文件后,前两行由listen指令组成:

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

listen指令指定服务器可以接受请求的端口。此外,括号中的LISTEN[::]表示IPv6地址。如果您愿意,也可以在listen指令后面包含您的IP地址信息。但是,在此特定示例中,到域的连接由root路径和服务器名称指令表示。如前所述,您必须确保此配置文件中的域或IP地址信息是准确的,否则它将无法工作。因此,请仔细检查rootsever_name指令在您要连接到的域中是否准确。

在确认listen指令的配置正确设置为端口80后,可以保存并关闭该文件。如果您使用的是Nan,可以通过按CTRL+XYEnter来完成。

要确保您的配置文件没有任何语法错误,请运行以下命令:

1sudo nginx -t

需要注意的是,如果您在运行此命令后对配置文件进行了更改,但未收到语法错误,请务必使用sudo system ctl reart nginx重启nginx以启用您的更改。

完成此操作后,打开浏览器并导航到http://example.com.如果您收到以下网页,则您调整后的防火墙设置成功,端口80可以接受请求:

![)

此网页确认您的Nginx Web服务器已安装并且工作正常。

结论

在本教程中,您了解了如何验证您的Nginx服务是否处于活动状态,以及可能导致您常见的无法访问此站点 在使用Nginx Web服务器时出现错误的防火墙和端口连接。如果您有兴趣了解更多关于ngix的信息,您可以查看我们的已标记社区页面,或跳转到学习如何在Ubuntu 22.04.上安装ngix

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