Nginx – 清风亦平凡 https://www.mlplus.net 关注IT世界,记录平凡生活 Fri, 21 Jul 2023 15:32:50 +0000 zh-CN hourly 1 https://wordpress.org/?v=6.4.3 Nginx禁止指定UA、IP或者IP段访问 https://www.mlplus.net/2023/07/21/nginx-access-denied-ua-ip/ https://www.mlplus.net/2023/07/21/nginx-access-denied-ua-ip/#respond Fri, 21 Jul 2023 04:50:21 +0000 https://www.mlplus.net/?p=4293 背景

在管理后台修改一些内容的时候,想到很久之前安装的重定向插件Redirections,随便就看一下。这不看不知道,看到了就差点大声尖叫。没有想到这么多对站点无意义的请求命中之前设置的重定向规则,一眼就可以发现请求UA不正常。例如:Apache-HttpClientpython-requests

这种是一些非法采集的应用,觉得还是要对这类UA进行一些限制,例如:禁止指定UA访问、拒绝IP或者IP段的访问等。

非正常UA访问记录图

现在服务已经由原来的Apache迁移到了Nginx服务上运行,所以现在的处置方案针对Nginx的。

Nginx禁止特定UA访问

Nginx中有一个内置变量$http_user_agent,表示HTTP请求头中的User-Agent字段。使用正则表达式匹配User-Agent字段中是否包含特定的字符串,符合规则的则禁止访问。具体实现如下:


location / {
    if ($http_user_agent ~* (python-requests|Apache-HttpClient)) {
        return 403;
    }
}

以上配置可以用于防止用户使用某些自动化工具或脚本对站点进行滥用。然而,需要注意的是,这种检测方式并不完全可靠。因为用户可以通过修改User-Agent来绕过此防护措施。所以这种方式只可以被视作拦截大多数爬虫程序的一种简单手段。

Nginx禁止特定的IP以及IP段

如果说Nginx禁止特定的UA来访问是一个泛化的处理方式的话,那么禁止IP或者IP段这是一个具备针对点的解决方法。针对某个IP或者某个IP段,这种方式比较滞后,发现大量无用请求后才可以采取的措施。当然,面对这种恶意的请求,这些也只是最快速、最简单、最低廉的解决方案。

Nginx中,可以使用deny指令来禁止IP地址或IP地址段的访问。这个功能可以用于防止恶意访问和DDoS攻击,以及限制对特定内容的访问。

禁止单个IP地址

要禁止单个IP地址的访问,可以在 Nginx 配置文件中添加以下行:


location / {
    deny 192.168.1.100;
    # 其他配置
}

在此例中,使用 deny 指令来阻止IP地址为 192.168.1.100 的客户端访问该位置的内容。如果有客户端尝试访问,他们将收到403 Forbidden错误。

禁止IP地址段

如果要禁止IP地址段的访问,可以在 Nginx 配置文件中使用 CIDR 表示法。CIDR 表示法允许您指定一个 IP 地址的范围。例如,要阻止 192.168.0.0/24 子网内的所有客户端访问,可以使用以下配置:


location / {
    deny 192.168.0.0/24;
    # 其他配置
}

这将阻止子网内的所有IP地址从该位置访问,包括 192.168.0.1192.168.0.2192.168.0.3 等等。

恢复被禁止的客户端

如果想恢复先前被禁止的 IP 地址或 IP 地址段的客户端,请简单地将其从相关的配置中删除或注释掉。


location / {
    # deny 192.168.1.100;
    # deny 192.168.0.0/24;
    # 其他配置
}

完整实例

下面是一个完整的Nginx配置,它禁止IP地址为192.168.1.100192.168.0.0/24的客户端访问站点:


http {
    server {
        listen 80;
        server_name example.com;
        root /var/www/html;

        location / {
            # 禁止IP地址为192.168.1.100的客户端访问
            deny 192.168.1.100;

            # 禁止IP地址为192.168.0.0/24的客户端访问
            deny 192.168.0.0/24;

            # 允许其他客户端访问
            allow all;

            # 其他配置
        }
    }
}



转载请注明:清风亦平凡 » Nginx禁止指定UA、IP或者IP段访问

]]>
https://www.mlplus.net/2023/07/21/nginx-access-denied-ua-ip/feed/ 0
WordPress由Apache迁移到Nginx出现404问题的解决方法 https://www.mlplus.net/2023/06/15/wordpress-nginx-rewrite/ https://www.mlplus.net/2023/06/15/wordpress-nginx-rewrite/#respond Thu, 15 Jun 2023 11:01:55 +0000 https://www.mlplus.net/?p=4236 背景

虚拟主机即将到期且位置在香港,为了网站更好的访问速度索性就迁回大陆。在好多年前购买的时候只有Apache可选,这次迁回有Nginx可以选择,官方有说这个性能更加的强劲,所以这次就选了Nginx服务。数据以及文件很容易就完成了迁移,本想万事大吉,随便点击了几下测试全是404,其中包括文章、分类、标签、搜索、分页、站点地图、日期等全部404。WordPress后台固定链接设置的是日期和名称,应该就是URL重写的问题了。在使用Apache的虚拟主机的时候是默认的有相关配置的,但是新购的Nginx虚拟主机就没有这种配置了。所以,只有自己来进行URL的重写配置。

固定链接
404演示

Nginx解决方法

Nginx重写URL配置内容如下:


location / {
    if (!-e $request_filename) {
        rewrite ^/([0-9]+?)/([0-9]+?)/([0-9]+?)/([^/]+)$ /index.php?year=$1&monthnum=$2&day=$3&name=$4 last;
        rewrite ^/([0-9]+?)/([0-9]+?)/([0-9]+?)/?$ /index.php?year=$1&monthnum=$2&day=$3 last;
        rewrite ^/([0-9]+)/([0-9]+)/?$ /index.php?year=$1&monthnum=$2 last;
        rewrite ^/category/(.*)/page/([0-9]+?)/?$ /index.php?category_name=$1&paged=$2 last;
        rewrite ^/category/(.*)$ /index.php?category_name=$1 last;
        rewrite ^/tag/(.*)/page/([0-9]+?)/?$ /index.php?tag=$1&paged=$2  last;
        rewrite ^/tag/(.*)/?$ /index.php?tag=$1 last;
        rewrite ^/page/([0-9]+?)/?$ /index.php?paged=$1 last;
        rewrite ^/([0-9]+?)/([0-9]+?)/page/([0-9]+?)/?$ /index.php?year=$1&monthnum=$2&paged=$3 last;
        rewrite ^/search/(.+?)/page/([0-9]+?)/?$ /index.php?s=$1&paged=$2 last;
        rewrite ^/search/(.+?)/?$ /index.php?s=$1 last;
        rewrite ^/(.+?)$ /index.php?pagename=$1 last;
    }
    try_files $uri $uri/ /index.php?$args;
}

location ~*  /feed/?$ {
    try_files $uri /index.php?$args;
}

location = /wp-sitemap.xml {
    try_files $uri $uri/ /index.php?$args;
}

location ~ ^/wp-sitemap(-index)?.xsl {
    try_files $uri $uri/ /index.php?$args;
}

location ~ ^/wp-sitemap-(.*?)-(.*?).xml$ {
    try_files $uri $uri/ /index.php?$args;
}

如果觉得以上配置太过臃肿,可以使用以下配置


location / {
     try_files $uri $uri/ /index.php?$args;
}

Apache中解决方法

.htaccess文件中加入以下代码:


<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>



转载请注明:清风亦平凡 » WordPress由Apache迁移到Nginx出现404问题的解决方法

]]>
https://www.mlplus.net/2023/06/15/wordpress-nginx-rewrite/feed/ 0
使用Nginx配置资源目录达到下载目的 https://www.mlplus.net/2022/09/05/nginx-downlaod/ https://www.mlplus.net/2022/09/05/nginx-downlaod/#respond Mon, 05 Sep 2022 02:24:24 +0000 https://www.mlplus.net/?p=3931 使用Nginx配置资源目录达到下载目的-第0张图片

背景

实施人员临时需要在客户服务器上配置一个可下载的目录,为了可以在内网进行交换文件。

Nginx配置

       
location /resources {
          #下载的资源目录 绝对路径 最后 "/" 结尾
          alias /app/smart/logs/;
          autoindex on;
          autoindex_format html; #以html风格将目录展示在浏览器中
          autoindex_exact_size off; #切换为 off 后,以可读的方式显示文件大小,单位为 KB、MB 或者 GB
          autoindex_localtime on; #以服务器的文件时间作为显示的时间
          client_max_body_size 4048M;
          proxy_max_temp_file_size 4048M;
          proxy_send_timeout 600; #后端服务器数据回传时间(代理发送超时)
          proxy_read_timeout 600; #连接成功后,后端服务器响应时间(代理接收超时)
          
          #符合条件,直接下载
          if ($request_filename ~* ^.*?\.(txt|doc|pdf|rar|gz|zip|docx|exe|xlsx|ppt|pptx)$){
             add_header Content-Disposition attachment;
          }
        }

访问地址规则为:http://url/resources,这样就可以看到我们需要页面。示例如下:

https://www.skyfinder.cc/resources



转载请注明:清风亦平凡 » 使用Nginx配置资源目录达到下载目的

]]>
https://www.mlplus.net/2022/09/05/nginx-downlaod/feed/ 0