河池建设银行招聘网站,晨光文具网站建设策划书,html网页模板网站,漳州市住房与城乡建设部网站一、问题描述
正常访问https的站点时#xff0c;使用网址https://www.baidu.com#xff0c;但会有一种错误的访问请求http://www.baidu.com:443#xff0c;一般都是非人类所为#xff0c;如漏洞扫描工具#xff0c;那么请求以后带来的后果是个错误页面 400 Bad Request T…一、问题描述
正常访问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自定义页面的时候终于解决了所有的问题才有了第一步的解决方案