在过去的几周里,我一直在寻找解决方案,为端口 443 上的默认主机设置 404 nginx 配置。但到目前为止还没有解决方案。
为了正确澄清问题,我们以运行在 nginx 上的 quora.com 为例。
现在 Quora.com 的公共 IP 是 192.229.182.210,当您输入以下内容时,它会显示以下结果
http://192.229.182.210- 显示 404 https://192.229.182.210- 服务器可能在欺骗你 -> 然后显示 404
提示 - 大多数在 nginx 上运行的其他服务器都表示证书无效,然后转发到其生产主机。示例 - wordpress.org
问题是您是否应该在默认配置中使用 SSL 代码片段来传递 404,如 quora 的公共 https ip 所示?如果是,它是自签名的吗?如果没有使用 SSL,该怎么做?
我当前的配置是
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
return 403;
}
答案1
https://192.229.182.210在 Chrome、IE 和 Firefox 中显示证书警告。也许您添加了允许其忽略证书不匹配的例外,或者您使用的浏览器非常宽松。如果您没有看到此信息,请清除缓存和例外,刷新,如果仍然出现此信息,请提供屏幕截图。
我上面描述的是预期的行为,因为 https 证书是针对域名而不是 IP 颁发的。
我认为,在没有域名的情况下,无法基于对 IP 的 https 请求显示页面而不收到证书警告。这需要向 IP 颁发 https 证书,是可能的但很少有人这样做。
答案2
最终找到了如何为 SSL 默认 IP 地址获取合适的 404 的答案。
来源 :正确设置 https 的“默认” nginx 服务器
虽然没有多少人赞成这个答案,但 Quora 确实使用自签名证书作为默认主机并显示自定义 404。使用以下内容将显示默认 404。
将默认配置设置为此。
server {
server_name _;
listen 80 default_server;
return 404;
}
server {
listen 443 ssl;
server_name _;
ssl_certificate /etc/nginx/ssl/nginx.crt;
ssl_certificate_key /etc/nginx/ssl/nginx.key;
return 404;
}
如果不存在 ssl 目录,则创建该目录
sudo mkdir -p /etc/nginx/ssl
然后为同一个创建一个自签名 SSL
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/nginx.key -out /etc/nginx/ssl/nginx.crt
检查错误并重新加载 nginx 以获取 404
nginx -t
sudo sytemctl reload nginx