我在Lightsail上用Nginx和NodeJS运行了一个网站。
当我去我的mywebsite.com,我的网站是可访问的,是安全的。然而,当我试图输入该网站的公共IP,Nginx返回404错误页面。该网站是由LetsEncrypt认证。
我确实通过在IP地址前添加http://来访问浏览器上的IP地址。但是,当我正常访问我的IP地址时,Nginx返回404错误。为什么会这样?
我很好与IP不可访问.但我的CDN是不工作,因为它.我认为它需要可访问,而不是返回一个404页面?
我为什么要诊断和解决这个问题?
先谢了。
1条答案
按热度按时间kgsdhlau1#
Host:
标头标识浏览器访问网站时使用的主机名/域名,当Web服务器在同一个TCP绑定(IP地址+端口号+协议)上为多个网站提供服务时。Web服务器然后使用它来确定要提供的内容。Web浏览器从地址栏中的URI生成
Host:
头。当您访问
http://1.2.3.4/foobar
时,您的浏览器会发送以下请求:字符串
当您访问
http://example.com/foobar
时,您的浏览器会发送以下请求:型
当您访问
http://www.example.com/foobar
时,您的浏览器会发送以下请求:型
当您访问
https://example.com/foobar
(或https://www.example.com/foobar
)而不是http://example.com
和http://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:
标头。例如: