Node.js 404连接到IP地址但不在域名中时出错

Node.js 404连接到IP地址但不在域名中时出错,node.js,nginx,Node.js,Nginx,我在Lightsail上用Nginx和NodeJS运行了一个网站 当我访问mywebsite.com时,我的网站是可访问的,并且是安全的。但是,当我尝试输入该网站的公共IP时,Nginx返回404错误页面。该网站由LetsEncrypt认证 我通过在IP地址之前添加http://来访问浏览器上的IP地址。但是,当我通常转到我的IP地址时,Nginx返回404错误。为什么会这样 我对IP不可访问表示满意。但是我的CDN因为它而不起作用。我认为它需要是可访问的,而不是返回404页 为什么我要着手诊断

我在Lightsail上用Nginx和NodeJS运行了一个网站

当我访问mywebsite.com时,我的网站是可访问的,并且是安全的。但是,当我尝试输入该网站的公共IP时,Nginx返回404错误页面。该网站由LetsEncrypt认证

我通过在IP地址之前添加http://来访问浏览器上的IP地址。但是,当我通常转到我的IP地址时,Nginx返回404错误。为什么会这样

我对IP不可访问表示满意。但是我的CDN因为它而不起作用。我认为它需要是可访问的,而不是返回404页

为什么我要着手诊断和解决这个问题


提前感谢。

主机:标题标识当Web服务器在同一TCP绑定(IP地址+端口号+协议)上为多个网站提供服务时,浏览器用于访问网站的主机名/域名。然后Web服务器使用它来确定要服务的内容

Web浏览器从地址栏中的URI生成
Host:

当您访问
http://1.2.3.4/foobar
您的浏览器发送此请求:

GET /foobar
Host: 1.2.3.4
GET /foobar
Host: example.com
GET /foobar
Host: www.example.com
当您访问
http://example.com/foobar
您的浏览器发送此请求:

GET /foobar
Host: 1.2.3.4
GET /foobar
Host: example.com
GET /foobar
Host: www.example.com
当您访问
http://www.example.com/foobar
您的浏览器发送此请求:

GET /foobar
Host: 1.2.3.4
GET /foobar
Host: example.com
GET /foobar
Host: www.example.com
当您访问
https://example.com/foobar
https://www.example.com/foobar
请求相同,但底层HTTP连接包装在TLS(以前称为SSL)连接中。HTTP/2(SPDY)和HTTP/3(QUIC)使事情变得复杂,所以我不会解释它们是如何工作的

在您的情况下,您需要编辑nginx配置,以向您的网站添加另一个绑定,该绑定将
http://
映射到您的网站,以及
https://
。您需要检查web应用程序的代码,以确保它可以使用意外的
Host:
头处理请求-您还可以配置nginx将传入请求的
Host
头修改为您的常用头

如果您使用的是HTTPS,则需要将您的IP地址作为SAN(使用者备用名称)添加到TLS证书中-这通常是一个坏主意,因为IP地址会发生变化,并且LetsEncrypt无论如何都不会为IP地址提供证书,所以这是没有意义的

出于开发目的以及在本地运行nginx时(即
http://localhost
)那么您就不再需要
本地主机的TLS证书了,因为自2020年初以来,基于Chromium的浏览器现在可以识别
http://localhost
作为“安全的”网站,即使它已通过http://
而不是http://:


为了立即解决问题,当您通过IP地址访问站点时,可以使用浏览器扩展来覆盖
主机:
标题

e、 g:


您必须向我们展示您的Nginx配置。此外,如果使用HTTPS,则必须使用主机名,否则浏览器将出现证书错误。