nginx解决非人类使用http打开的443,解决网安漏扫时误扫443端口带来的问题

一、问题描述

正常访问https的站点时,使用网址https://www.baidu.com,但会有一种错误的访问请求http://www.baidu.com:443,一般都是非人类所为,如漏洞扫描工具,那么请求以后带来的后果是个错误页面

400 Bad Request

The plain HTTP request was sent to HTTPS port

如图:

通常我们部署的nginx,会用add_header添加一些安全类属性,由于上面的错误是nginx直接返回的错误,因此不带有这些安全属性,那么漏洞扫描工具就会报告网站或主机不安全,解决起来也很麻烦,本人通过不断搜索+尝试,最终完美解决

二、解决方法

1、直接给你答案

配置默认站点
server {
listen 80 default_server;listen 443 ssl default_server;server_name _;
#这里可以补充自己要添加的安全性设置等

#修改自定义的497页面
error_page 497 /497.html;location = /497.html{return 200 "非法https请求";}

default_type text/html;return 403 "源站不存在或不可访问";
}

返回的默认400错误页太丑了,这里加了自定义,是想告诉你,虽然我们看到是400错误,实际上它并不是400错误代码,而是497代码,此前我一直自定义400,但还是显示默认页,网上找了很多教程,终于见到一位大神的回复,说是497错误,来源于:https://q.cnblogs.com/q/112867

最主要的问题是:如果不去自定义497的话,那么根据上面的配置,不会抛出403页面,一直是显示400页面,按理说上面已经监听到了,就应该返回才对,不知道算不算bug

2、尝试过程中走的弯路

当上面不配置497的时候,返回的是400,于是我第一个想到的可能性是默认配置监听不到http://xxx:443,于是误区就开始了

从请求地址http://xxx:443来分析,它应该是监听不带ssl的443端口,即listen 443;

带证书的监听是listen 443 ssl;所以我尝试添加一条只listen 443;的,确实可以监听到,也可以返回我要的结果,比如返回403或跳转等

此时,觉得问题已经解决了,然后发现,后面的配置有其它ssl站点的全都打不开了,看了日志,原来是443冲突了

listen 443和其它块中的listen 443 ssl是冲突的,不能同时使用,于是进入了误区2

尝试listen 443增加ip,我用的是腾讯云,有内网ip,如10.0.1.1,于是使用

listen 10.0.1.1:443,这里居然可以了,其它ssl站点也正常了,此时,觉得问题又解决了

但是当我把此功能在另一台服务器上配置,居然又监听不到了,另一台服务器没有内网ip,直接用的是公网绑定,于是我这样监听

listen 122.122.122.122:443,发现这样不行,又是冲突了,于是我改为

listen 127.0.0.1:443,发现其它ssl站点正常了,但是400错误又出现了

于是又不断的搜索,当我碰到497自定义页面的时候,终于解决了所有的问题,才有了第一步的解决方案

相关推荐
q***555842 分钟前
使用 Nginx 搭建代理服务器(正向代理 HTTPS 网站)指南
运维·nginx·https
梁正雄5 小时前
linux服务-Nginx+Tomcat+Redis之Session 共享 - 容器单机版
linux·nginx·tomcat
wanhengidc5 小时前
云手机是由什么组成的?
运维·服务器·web安全·游戏·智能手机
wanhengidc9 小时前
网站服务器都有哪些作用?
运维·服务器·科技·智能手机·云计算
m0_488777659 小时前
Web与Nginx网站服务
nginx·web
原神启动19 小时前
云计算大数据——Nginx入门篇( Web 核心概念、HTTP/HTTPS协议 与 Nginx 安装)
大数据·http·云计算
阿珊和她的猫9 小时前
HTTP 状态码 404:深入解析与实践应对
网络·网络协议·http
百***757410 小时前
linux上redis升级
linux·运维·redis
小小编程能手11 小时前
Linux文件编程
linux·运维·服务器
木童66211 小时前
nginx安装步骤详解
linux·运维·服务器·网络·nginx