禁止Nginx通过IP打开默认首页

在生产环境中,为了网站的安全访问,需要Nginx禁止一些非法访问,如恶意域名解析,直接使用IP访问网站。下面记录一些常用的配置示例:

1、禁止IP访问

如果没有匹配上server name就会找default默认,返回501错误。

server {
   listen 80 default;
   return 501;
}

2、通过301跳转到主页

server {
  listen 80 default;
  server_name _;
  rewrite ^(.*) http://YourDomainName.example/$1 permanent;
}

3、凡是请求a.com 的都跳转到后面域名b.com上(这个方法需要放到server配置里)

if ($host ~ '^a.com'){
    return 301 https://b.com$request_uri;
}

或者不是访问b.com网站的全部重定向到b.com

if ($host != 'b.com') { 
    rewrite ^/(.*)$ http://b.com/$1 permanent;
}

来自2022年12月1日的更新:

默认主机推荐以这种方式来屏蔽未知的访问请求

server {
  listen 80 default_server;
  listen [::]:80 default_server;
  server_name _;
  return 444;
}
server {
  listen 443 ssl default_server;
  listen [::]:443 ssl http2 default_server;
  ssl_reject_handshake on;
}

HTTP:最关键的是 magic number 444。 444是nginx内置的错误代码。对我们来说 return 444 比 return 404还要好。因为 nginx 下即使return 404,也会有返回的header和一个包含错误信息的html body。但是return 444,服务器会立刻关闭连接,外部看来就好象服务不存在一样,但访问日志任然会出现再nginx的日志文件中。

HTTPS:自 1.19.4 起,Nginx 支持 ssl_reject_handshake 参数,设置为 on,当客户端传过来的 SNI 与已配置的 server name 都不匹配时,会拒绝 SSL 握手。本质需求就是为了当机器人或者奇怪的人类通过HTTPS访问你的IP时不暴露证书,也就不会暴露域名。

暂无评论

发送评论 编辑评论


				
上一篇
下一篇