Linux运维笔记
我们一直在努力

Nginx禁止通过IP的方式访问80和443端口

Nginx是一个轻量高效的Web应用服务,支持多个虚拟主机,并且默认访问端口为80端口(http)和443端口(https),一个Nginx可以有多个虚拟主机或者做反向代理,并且绑定多个不同的域名。

如果不对IP仿作做任何处理的话,直接输入IP将会访问其中一个虚拟主机,并且有人恶意将一个域名指向你的服务器IP,就可以通过他们的域名访问你们的服务器了。

要解决这些问题,可以禁止通过IP的方式访问可以解决,80端口的解决方法比较简单,添加一个server {}字段即可:

80端口配置方式:

# [403] 禁止通过IP访问80端口
server {
        listen 80 default;
        server_name _;
        return 403;
        server_tokens off;
}

443端口配置方式:

# [403] 禁止通过IP访问80和443端口
server {
        listen 80 default;
        listen 443 default_server;
        server_name _;
        return 403;
        server_tokens off
        # [SSL] https访问置字段
        ssl_certificate CA.pem;
        ssl_certificate_key CA.key;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4:!DH:!DHE;
        ssl_prefer_server_ciphers on;
        ssl_session_cache shared:SSL:1m;
        ssl_session_timeout 10m;
}

 

  • server_name _;    代表的意思是所有除了已经配置的server_name可以访问外,其他地址返回403并断开连接
  • return 403;    通过IP访问会自动返回403错误码,当然你也可以填写404,都可以
  • ssl_certificate CA.pem;    Nginx 上对于 SSL 不配置证书的时候会出现协议错误,解决方法就是随便生成一个证书填进去就好。
  • ssl_certificate_key CA.key;    Nginx 上对于 SSL 不配置证书的时候会出现协议错误,解决方法就是随便生成一个证书填进去就好。

 

报错:The plain HTTP request was sent to HTTPS port

如果出现上面的错误,可能是是在ssl配置字段中配置了 ssl on;,去掉就好,在listen 443后面加上ssl即可


 

httpd禁止直接通过IP的方式访问80和443端口

赞(1) 打赏

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址