侧边栏壁纸
  • 累计撰写 402 篇文章
  • 累计创建 63 个标签
  • 累计收到 122 条评论

目 录CONTENT

文章目录

Nginx 配置,禁止通过ip地址直接访问Web 服务

Z同学
2022-11-26 / 0 评论 / 1 点赞 / 204 阅读 / 748 字
温馨提示:
本文最后更新于 2022-11-26,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

1. 原因

默认情况下Nginx配置完毕后,是允许ip地址直接访问的。而我们一直以开发者思维处理的话。也容易忽视这这方面存在的风险。

而这样做的风险在于:

  1. 其他人将他的域名绑定指向了我们的ip。那么容易造成服务器被网监判定为存在非法域名,造成服务器被断网。
  2. 各种ip访问扫码工具,会收集我们的Web应用程序信息,容易造成信息泄露。(access.log中很多通过ip地址访问的记录)

而且,如果碰见互联网清网行动大力度管控时期,所有web服务器都不允许通过ip地址进行访问web服务器,必须使用设定的域名访问web服务器。否则一律清理。

以上风险来源于网络,我的阿里云服务器两年期间没有提示有这个风险。 我发现百度到现在也是可以直接通过ip访问的,不一定必须是域名。

下面介绍Nginx中的配置。

2. 配置

首先,删除掉我们原先的server{ server_name} 中的ip地址。如果存在的话就进行删除,如果不存在就保持不变即可。

第二步,在我们的/etc/nginx/conf.d/default.conf文件中进行添加以下的配置即可:(PS:如果没有这个路径,那么可以添加到/etc/nginx/nginx.conf文件中,效果是一样的)

 server {
     listen 80  default_server;
     listen 443 default_server;
     server_tokens off;
     server_name _;
     return 444;
     
     ssl_certificate_key 我们自己的SSL证书全路径.key;
     ssl_certificate 我们自己的SSL证书全路径.pem;
 }

default_server; 代表默认无匹配的时候由当前的server处理。

server_name _;代表无效域名。

合起来的意思就是,其他server没有匹配的,全部由当前server进行匹配处理。

该server匹配到之后,处理的结果就是直接返回444状态

而前端收到的效果就是ERR_EMPTY_RESPONSE错误了。

配置完毕后输入nginx -t 检测通过后,通过service nginx reload刷新配置就可以生效了。

这个时候我们通过http://ip 或者https://ip 都将无法正确访问了。

所有的访问就必须通过域名才能访问了,通过ip地址的请求都将会打回。

2.1 问题

我配置完毕后,通过https://iphttp://ip 访问的确返回了444状态。但是如果我通过http://ip:443却不会返回444。而是返回400

最终我也没有找到解决方法,只是为了避免该页面上暴露nginx的版本号,添加了 server_tokens off;选项。

这个问题影响也不大。

1

评论区