如何为端口 443 上的默认主机设置 404 nginx 配置

如何为端口 443 上的默认主机设置 404 nginx 配置

在过去的几周里,我一直在寻找解决方案,为端口 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

相关内容