Nginx服务器禁止某IP段访问 403 404跳转到指定页面


1. Nginx禁止某IP段访问服务器

两种方法,

第一种 ,新建一个xxxx.conf的文件

语法大概说明:

deny: 为禁止的ip

allow: 为允许的ip

你可以理解为,黑名单,白名单

192.168.1.10 禁止或允许单个ip

192.168.1.0/24  禁止或允许192.168.1.1-192.168.1.255也就是禁止这个网段内所有的ip

有关于ip的掩码这块不了解的自行网络,

内容例为:

# 禁止单ip

deny 192.168.1.10;

# 禁止ip网段

deny 192.168.1.0/24;

# allow 为允许 ip写法一样,就不多写了

allow 192.168.1.10;

创建好之后进入自已nginx服务器的网站对应的xxxxx.conf文件或nginx.conf文件中,在server{}中include 加载一下自己创建的xxxx.conf文件;

命令如下:

server{
  xxxxxxxxxx
  xxxxxxxxxx
  include /xxxx/xxx/xxx/xxxx.conf
  xxxxxxxxxxx
  xxxxxx
}

第二种 为    就直接将deny allow 写在网站对应的Nginx 服务的xxxxx.conf文件或nginx.conf文件中

例如:

server{
  xxxxxxxxxx
  xxxxxxxxxx
  allow 192.168.2.0/24;
  deny 192.168.1.10;  
  xxxxxxxxxxx
  xxxxxx
}

经我个人测试 规则为先允许后禁止:

如:

allow 192.168.1.100;
deny 192.168.1.0/24;

那么真个网段中只有192.168.1.100才可以访问服务器,

如果先

deny 192.168.1.0/24;
allow 192.168.1.100;

那么无效就是全都不能访问

2 Nginx禁止后403 404等自定义页面跳转

举个简单的例子,

加载禁止或允许IP方法和上面的一样,就不多了,

下面采用第二种禁止或允许IP的方法,简单说明:

# 自定义禁止IP和跳转的过程学习

server {
  deny 192.168.1.0/24;    
  error_page 403 /xxxx.html;  # 禁止ip后返回Nginx默认403 xxxx.html 为自己要定义跳转的html
  location = /xxxx.html{      
     root /xxxx/xxxxx/xxxxx;  # 这里的xxxx....为你的xxxxx.html文件存放的路径最后 ; 号别忘了
     allow all;
  }
}

# 注:编写时很多行尾要 ;  分号别忘了,

网络文章一大抄,很多网写的xxxx.html 路径 最后连文件明也带上了,xxxx/xxxx/xxxxx/xxxx.html;

也不知道是不是版本问题,我的版本是1.18.0 后面带上xxxx.html文件名会报404错误,根据日志查找的原因

root /xxx/xx/xxxxx这段只写对路径即可,确保此路径下有 xxxxx.html自己的文件就可以

如果侧试玩或简单的一两条 就采用第二种方法

如果禁止IP段很多,采用第一种,这样ip 也清晰好管理,

3 禁止用ip访问服务器

server {
    listen 80 default;    # 在这里加上default
    server_name __;    # 经个人测试_一个下划线,保存正常,重载重启报错但可以启动正常,__两个下划线都正常
    return 500;    # 这里返回状态码,301 400 404 500等等都可以,默认显示nginx状态码
}

直接反回状态码浏览器报错,体验不好,这里可以做跳转:

server {
    listen 80 default;
    server_name __;
    rewrite ^(.*) https://django.qhweixin.com permanent;    # 跳转到自己想要的网址
}

也可以用第二种方法:

server {
    listen 80;
    server_name django.qhweixin.com;    # 域名
    if ($host != "django.qhweixin.com") {    # 判断如果host不等于域名时返回状态码
        return 403;    # 这里也是状态码,301 400 500等等,写什么显示什么,
    }
}

方法:

如果要跳转

return 301 https://django.qhweixin.com;  # 就直接跳到你需要网站
return 200 "您访问的网站不存在或已删除";  # 200 后跟字符串也可以直接显示

字符串乱码要加 charset utf-8;谷歌200的时候打开会下载,加

 add_header Content-Type "text/plain;charset=utf-8";
server {
    listen 80;
    charset utf-8;
    add_header Content-Type "text/plain;charset=utf-8";
    server_name django.qhweixin.com;    # 服务器IP
    if ($host != "django.qhweixin.com") {
        return 200 "您访问的网站不存在或已删除";    # 内容可自行编辑
    }
}

如果访问A网站跳转至B网站

server {
    listen 80;
    charset utf-8;
    add_header Content-Type "text/plain;charset=utf-8";
    server_name django.qhweixin.com;    # 服务器IP
    if ($host ~ '^A.com'){
            return 301 https://B.com$request_uri;
        }
}