Nginx限制特定IP访问自己的网站实现的几种方法

 更新时间:2024年12月22日 09:24:44   作者:fj_changing  
本文主要介绍了使用Nginx限制特定IP访问自己的网站的几种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

需求

一个网站只想被国内访问,或者只想被一个省或一个市访问,或者只允许特定的IP或IP段访问,或者禁止特定的IP或IP段访问。我知道的有三个方法:

  • 购买云服务器厂商的相关服务,它们能做到,结果相对准确;
  • 购买查询IP的网站的服务,写个中间件,自己的网站收到请求时根据IP去查归属地,然后根据业务需要直接允许或阻止本次请求,结果相对准确,但每次收到请求都去查询的话费用较高;
  • 购买离线的IP库,在Nginx中做配置,结果相对不准确,一次性付费,后续更新另外付费。

云服务器厂商的服务和查询IP的网站的服务,相对来说更准确,IP数量更完整,更新更及时;离线的IP库,由于数据源未知,相对来说不准确,IP数量不完整,更新不一定及时。

使用Nginx实现

 我用了宝塔,网站里添加了多个站点,每个站点都单独配置。

以内网IP为例,公网IP同理。以下配置都写在Nginx配置的server块中(也可以写在location中),IP支持一个一个写,也支持CIDR形式,公网IP的CIDR形式可以在ip138上查,准确性不知道。已知具体的IP段,有网站在线转换成CIDR形式,但我发现不同的网站转出的结果不同,最好还是手动计算验证下。

只允许192.168.1.X的IP访问,其他IP禁止访问。deny all;不能写在allow前面,会导致阻止所有的访问。

allow 192.168.1.1/24;
deny all;

禁止192.168.1.1、192.168.1.2、192.168.1.3访问,允许其他IP访问。

deny 192.168.1.1;
deny 192.168.1.2;
deny 192.168.1.3;
allow all;

被阻止访问时,页面显示403 Forbidden。

如果有大量的IP需要写,可以将上面的语句写在文件里,然后在server块中导入这个文件。这样在同一个服务器中有多个站点都需要这个同样的配置时,容易维护,后面更新IP只需要更新这个文件的内容,不用把每个站点的Nginx配置都改一遍。更新文件中的IP后,需重载Nginx配置才生效。

include /home/ip_limit/ip_limit.conf;

自定义403页面

403页面可以自定义,同样是在Nginx配置的server块中(也可以写在location中)。将页面写在/home/ip_limit/403_my.html,这个html中如果有图片,最好写死成base64,原因后面再说。最好不要用403.html这个文件名,可能和网站根目录中宝塔自动生成的默认403页面冲突,导致自定义403页面不生效。

我的网站只允许指定城市访问,所以Nginx中我配置了allow xxx和deny all;,这样会导致在其他城市访问时还是403 Forbidden,自定义的403页面不生效,所以需要单独设置这个自定义403页面为允许所有的访问。

error_page 403 /403_my.html;
location /403_my.html {
  allow all;  #不加会由于前面的allow和deny all导致阻止加载这个自定义的403页面,从而自定义403页面不生效
  root /home/ip_limit;
  internal;  # 防止直接访问这个页面,不加也行
}

403页面中的图片问题

做完上面的配置后,如果自定义403页面中的图片不是写死成base64,会发现被阻止访问时,页面中的图片没加载出来(img标签中src="./403.png"),然后查了资料在Nginx配置的server块中加了下面的内容,这样自定义403页面中的图片确实可以加载了(前提是这个图片在这里的root处设置的路径中,同理src的值也要做相应的调整),但正常访问网站时有的图片无法加载了。可能因这个设置导致网站的所有图片都从这里设置的路径中加载,但实际无法加载的图片没存放在这里。所以这个配置不具有通用性,还有个方法我没试,就是不加这个配置,把自定义403页面中的图片的src换成一个可加载的网络url。

location ~ .*\.(png|jpg|jpeg|gif|svg|ico){
  allow all;
  root /www/wwwroot/test/web;
}

最简单省事的方法是,不加这个配置,自定义403页面中的图片写死成base64。

允许所有人访问网站中的静态文件

我的网站只允许指定城市访问,但网站中提供一些静态文件可供所有人访问或下载,同样是在Nginx配置的server块中。

location /apk/user.apk { # app下载,不加会由于ip策略无法访问
  allow all;
}

单独放行网站中的一个接口

我的网站只允许指定城市访问,但要单独放行网站中的一个接口,例如文件上传接口,同样是在Nginx配置的server块中。假设公网接口是http://公网IP/oss/upload,对应的内网服务是http://192.168.1.1:9966/oss/upload。

location /oss/upload { # 文件上传接口,不设访问限制
  proxy_pass http://192.168.1.1:9966/oss/upload/; # 注意location末尾没斜线,这里末尾有斜线
  allow all;
}

参考链接

Nginx全面配置 - 知乎 (zhihu.com)

nginx 自定义 404、50x 错误页面_nginx 504超时时指定一个html界面-CSDN博客

Nginx配置自定义的403页面 - Mr.peter - 博客园 (cnblogs.com)

到此这篇关于Nginx限制特定IP访问自己的网站实现的文章就介绍到这了,更多相关Nginx限制特定IP访问内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Nginx配置中指令root和alias的区别浅析

    Nginx配置中指令root和alias的区别浅析

    这篇文章给大家主要介绍了Nginx配置中指令root与alias的区别,文章介绍的很详细,详细对大家理解root与alias很有帮助,有需要的朋友们下面来一起看看吧。
    2016-10-10
  • 当Nginx所在服务器的磁盘空间满时的影响以及如何避免这一问题

    当Nginx所在服务器的磁盘空间满时的影响以及如何避免这一问题

    Nginx所在服务器的磁盘空间满了,会导致日志无法写入、缓存失效、反向代理请求异常等问题,严重时可能导致服务不可用,这篇文章主要介绍了当Nginx所在服务器的磁盘空间满时的影响以及如何避免这一问题,需要的朋友可以参考下
    2024-12-12
  • nginx 常用指令 try_files allow root alias的使用

    nginx 常用指令 try_files allow root ali

    本文主要介绍了nginx 常用指令 try_files allow root alias的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-08-08
  • Nginx手动编译、安装超详细教程

    Nginx手动编译、安装超详细教程

    Nginx安装除了编译以外,我们还可以直接用操作系统上自带的工具比如说yum、apt-get直接安装,这篇文章主要介绍了Nginx手动编译、安装超超详解,需要的朋友可以参考下
    2023-09-09
  • Nginx 平滑升级的实现(拒绝服务漏洞)

    Nginx 平滑升级的实现(拒绝服务漏洞)

    本文主要介绍了Nginx 平滑升级的实现(拒绝服务漏洞),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-02-02
  • nginx实现发布静态资源的方法

    nginx实现发布静态资源的方法

    这篇文章主要介绍了nginx实现发布静态资源的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01
  • Nginx如何配置加密证书访问实现

    Nginx如何配置加密证书访问实现

    本文主要介绍了Nginx如何配置加密证书访问实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • Nginx上对同一IP访问的特定URL进行限流实现

    Nginx上对同一IP访问的特定URL进行限流实现

    要在Nginx上对同一IP访问的特定URL进行限流,您可以使用ngx_http_limit_req_module模块,本文就来介绍一下如何使用,具有一定的参考价值,感兴趣的饿
    2024-01-01
  • 使用nginx同域名下部署多个vue项目并使用反向代理的方法

    使用nginx同域名下部署多个vue项目并使用反向代理的方法

    这篇文章主要介绍了使用nginx同域名下部署多个vue项目并使用反向代理的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-02-02
  • 详解Nginx中的重定向功能

    详解Nginx中的重定向功能

    这篇文章主要介绍了详解Nginx中的重定向功能,Nginx是一款基于事务的无阻塞的高性能服务器,需要的朋友可以参考下
    2015-07-07

最新评论