常见的Nginx连接错误
引言
Nginx是一种流行的网络服务器,可以在互联网上托管许多大型和高流量的网站。由于可能的原因和解决方案很多,Nginx连接错误很难调试。此外,修复错误时并不总是有很多提示指引你朝正确的方向前进。由于这些错误的性质是无法与Nginx建立连接,因此这些错误通常在浏览器层面而不是Nginx级别的特定错误中显示。实际上,许多与Nginx有关的常见错误与连接的某个方面(如端口或防火墙)有关。
本指南中的示例在Ubuntu 22.04服务器上进行了测试,但适用于大多数Nginx安装。这些错误大部分可以在Nginx的标准化配置文件范围内解决,尽管目录和路径可能略有不同。
在本教程中,您将了解到对于Nginx网页服务器而言,浏览器连接错误意味着什么,以及您可以采取的各种步骤来识别和纠正这个问题,使您的服务器恢复正常运行。
查看您的Nginx错误日志
此教程中提出的错误和解决方案是常见情况,但并非详尽无遗。由于语法错误破坏了Nginx所认可的有效语句的结构,下面的错误仅为Nginx响应的指南。通常情况下,一个错误可能会引发另一个错误,并且错误可能是更大问题或不同问题的症状。您的具体情况和设置可能会有所不同。
请注意,您始终可以查看Nginx错误日志来查看错误的运行列表。
- sudo cat /var/log/nginx/error.log
处理“无法访问该网站”错误
在浏览网页时,你可能遇到过类似的页面,上面显示“无法访问该网站”。这个问题可能有很多可能的原因,但本教程将重点介绍从设置Nginx的用户角度出发的常见错误。有时刷新浏览器可以解决问题,但如果是你自己的网页服务器出现问题,可能会有其他因素影响服务器后端的连接。
以下是您在网页浏览器上可能收到的错误信息示例:
在我们开始之前,让我们讨论一下这个错误对你的网络服务器有什么影响。首先,example.com地址响应时间过长,因此,在信息末尾引用了ERR_CONNECTION_TIMED_OUT。然而,请记住这是一个浏览器级别的错误,而不是来自你的Nginx服务器的直接错误。可以将这个错误消息解释为为什么无法建立与你的服务器的连接的可能原因。此外,这里提供的解决方案是从客户端用户的角度给出的。
再说一遍,这是一个情景,你在运行自己的网络服务器,而不是访问互联网上的任何特定网站。要真正诊断问题,你将不得不通过一份可能原因的列表逐步排查,并亲自检查你的Nginx设置。
由于您正在使用Nginx,可以通过运行特定命令并检查防火墙和配置设置来评估可能导致此错误的几个项目。
验证您的Nginx Web服务器是否处于活动状态。
你可以采取的第一步是验证在你的系统上Nginx是否处于活动状态,并且没有安装问题。你可以通过运行systemd init系统来检查你的机器上运行的Nginx服务的状态来进行验证。
- systemctl status nginx
如果你的Nginx网服务器正常运行,你会收到以下输出:
● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; preset: enable>
Active: active (running) since Thu 2022-11-03 16:37:22 UTC; 1 week 4 days >
Docs: man:nginx(8)
Main PID: 3253 (nginx)
Tasks: 2 (limit: 1116)
Memory: 3.7M
CPU: 1.250s
CGroup: /system.slice/nginx.service
├─3253 "nginx: master process /usr/sbin/nginx -g daemon on; master>
└─3254 "nginx: worker process"
在输出中,有一行显示为“活跃”,指示 web 服务器是否正在运行。在这个例子中,它成功地启动并运行。如果没有,此行将显示为“非活跃”(已停止)。
Note
一旦确认您的Nginx服务正在运行,您可以再次在浏览器中输入服务器地址http://example.com来测试连接问题是否仍然存在。如果您不确定您的IP地址,您可以使用icanhazip.com工具来定位您的IP地址。
- curl -4 icanhazip.com
如果在此时你的网站仍然无法访问,则下一步是检查你的防火墙设置。
验证和调整您的防火墙设置
你可以采取的另一个步骤是检查您的网络服务器连接,验证防火墙设置是否正确配置以接受通过适当端口连接的请求。如果没有正确配置,您需要调整防火墙设置以允许对该端口的连接。默认情况下,Nginx网络服务器将在端口80上侦听任何传入请求,并使用设置的SSL证书在端口443上侦听安全连接。然而,出于本教程的目的,我们将专注于默认的端口80。
在这个示例中,我们使用的是Ubuntu 22.04和简单防火墙UFW。注意,这可能因您特定的发行版而有所不同。首先检查您防火墙的当前设置。请记住,您将需要以root用户权限运行以下命令。我们建议使用具有sudo特权的用户来执行此操作。
- sudo ufw status
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
这个输出列出了机器上当前打开的端口连接。不幸的是,端口80不在列表中,因此需要添加以允许Nginx访问。如果你不确定有哪些应用程序配置可用,你可以运行ufw app list。
- sudo ufw app list
Available applications:
Nginx Full
Nginx HTTP
Nginx HTTPS
OpenSSH
由于成功安装了Nginx,这里列出了可用于配置的各种Nginx配置文件。以下是这些配置文件的快速概述:
- Nginx Full: opens both ports 80 (normal, unencrypted traffic) and 443 (TLS/SSL encrypted traffic)
- Nginx HTTP: opens only port 80
- Nginx HTTPS: opens only port 443
只需打开端口80来正确配置连接,您可以使用以下命令添加Nginx HTTP应用程序。
- sudo ufw allow ‘Nginx HTTP’
Note
如果此命令成功,它会返回一个输出”规则已添加”。要确认Nginx HTTP应用已添加到列表中,请再次使用sudo ufw status检查状态。
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx HTTP ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx HTTP (v6) ALLOW Anywhere (v6)
此输出现在列出了已添加的Nginx HTTP应用程序,并且端口80已经打开以接收连接。
验证您的Nginx配置文件
在测试您的网络浏览器之前,建议您检查您的配置设置,确保服务器域名块已经设置为监听端口80。在您的Nginx配置中正确设置端口和IP地址是至关重要的,并且必须与防火墙中的适当的开放端口配对使用。如果有任何组件缺失,连接将失败。
您可以在您喜欢的文本编辑器中打开Nginx配置文件。这里我们将使用nano编辑器。
- sudo nano /etc/nginx/sites-available/example.com
一旦文件被打开,前几行包含了监听指令。
server {
listen 80;
listen [::]:80;
root /var/www/example.com/html;
index index.html index.htm index.nginx-debian.html;
server_name example.com www.example.com;
location / {
try_files $uri $uri/ =404;
}
}
监听指令用于指定服务器接收请求的端口。此外,[::]括号表示IPv6地址。如果您愿意,您也可以在监听指令后包括您的IP地址信息。然而,在这个特定的例子中,连接到域的表示由根路径和服务器名指令完成。正如之前提到的,您必须确保在此配置文件中您的域名或IP地址信息是准确的,否则将无法工作。因此,请仔细检查根路径和服务器名指令是否与您要连接的域名完全匹配。
在确认监听指令的配置已正确设置到端口80后,您可以保存并关闭文件。如果您使用nano编辑器,可以通过按下CTRL+X、Y和ENTER来完成此操作。
为了确保您的配置文件没有任何语法错误,请执行以下操作:
- sudo nginx -t
请注意,如果你对配置文件进行了更改,并在运行此命令后没有收到语法错误,请确保使用sudo systemctl restart nginx重新启动Nginx以使更改生效。
完成此操作后,打开浏览器并导航至http://example.com。如果您收到以下网页,则表示您已成功调整防火墙设置,允许端口80接收请求。
这个网页确认您的Nginx网服务器已经安装并正常运行。
结论。
在本教程中,你学习了如何验证Nginx服务是否处于活动状态,以及可能导致使用Nginx Web服务器时常见的“该网站无法访问”错误的防火墙和端口连接问题。如果你对学习更多关于Nginx的内容感兴趣,可以查看我们标记的社区页面,或者开始学习如何在Ubuntu 22.04上安装Nginx。