nginx 连接到IP地址而不是域名时出现404错误

xzabzqsa  于 5个月前  发布在  Nginx
关注(0)|答案(1)|浏览(65)

我在Lightsail上用Nginx和NodeJS运行了一个网站。
当我去我的mywebsite.com,我的网站是可访问的,是安全的。然而,当我试图输入该网站的公共IP,Nginx返回404错误页面。该网站是由LetsEncrypt认证。
我确实通过在IP地址前添加http://来访问浏览器上的IP地址。但是,当我正常访问我的IP地址时,Nginx返回404错误。为什么会这样?
我很好与IP不可访问.但我的CDN是不工作,因为它.我认为它需要可访问,而不是返回一个404页面?
我为什么要诊断和解决这个问题?
先谢了。

kgsdhlau

kgsdhlau1#

Host:标头标识浏览器访问网站时使用的主机名/域名,当Web服务器在同一个TCP绑定(IP地址+端口号+协议)上为多个网站提供服务时。Web服务器然后使用它来确定要提供的内容。
Web浏览器从地址栏中的URI生成Host:头。
当您访问http://1.2.3.4/foobar时,您的浏览器会发送以下请求:

GET /foobar
Host: 1.2.3.4

字符串
当您访问http://example.com/foobar时,您的浏览器会发送以下请求:

GET /foobar
Host: example.com


当您访问http://www.example.com/foobar时,您的浏览器会发送以下请求:

GET /foobar
Host: www.example.com


当您访问https://example.com/foobar(或https://www.example.com/foobar)而不是http://example.comhttp://www.example.com时,HTTP请求消息(即请求头)请求与它们的http:等价物相同,但底层HTTP连接被 Package 在TLS(以前的SSL)连接中。
在这种情况下,您需要编辑nginx配置以添加另一个绑定到您的网站,将http://<IP-address>Map到您的网站,以及https://<IP-address>。您需要检查Web应用程序的代码,以确保它可以处理使用意外Host:头的请求-您还可以配置nginx将传入请求的Host头修改为您常用的头。
如果你使用HTTPS,那么你需要将你的IP地址作为SAN(主题备用名称)添加到你的TLS证书中-这通常是一个坏主意,因为IP地址会改变,而LetsEncrypt不会为IP地址提供证书,所以这是没有意义的。
出于开发目的,当您在本地运行nginx(即http://localhost)时,您不再需要localhost的TLS证书,因为自2020年初以来,基于Chromium的浏览器现在将http://localhost识别为“安全”网站,即使它超过http://而不是https://

作为一种即时解决方法,您可以使用浏览器扩展在通过IP地址访问站点时覆盖Host:标头。
例如:

相关问题