linux中配置Nginx 拒绝代理访问教程

先大概说说简单的结构…前端一个Nginx反向代理,后端一个Nginx instance app for PHP…实际上就是个Discuz,之前面对CC攻击都是预警脚本或者走CDN,但是这次攻击者不再打流量,而是针对数据库请求页面进行攻击,如search操作…帖子ID F5等..从日志分析来看是从3个URL着手攻击的,当时使用Nginx 匹配$query_string 来return 503…不过会导致页面不能访问,所以想到这么一个折中的办法。

 首先你看一段代理请求的日志:

##通过分析,在后端发现其代理访问过来的数据都是两个IP的,默认情况下直接访问获取真实IP,其IP只有一个,而通过手机 3G\4G上网则是2个IP,不过有匿名IP的话,到服务器则只有一个IP,这种就不太好判断了...
[root@ipython conf]# tail -f /var/log/nginx/logs/access.log  | grep ahtax
120.193.47.34 - - [26/Sep/2014:23:34:44 +0800] "GET /ahtax/index.html HTTP/1.0" 503 1290 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36" "10.129.1.254, 120.193.47.34"
 

使用PHP分析下访问时的_SERVER变量

 代码如下 复制代码

[root@ipython conf]# cat /%path%/self_.php
<?php

if ($_SERVER["HTTP_X_FORWARDED_FOR"]!="")
{
    $user_ip=$_SERVER["HTTP_X_FORWARDED_FOR"];
}elseif($_SERVER["HTTP_X_REAL_IP"]!=""){
    $user_ip=$_SERVER["HTTP_X_REAL_IP"];
}else{
        $user_ip=$_SERVER["REMOTE_ADDR"];
}

echo $user_ip."<br />";

        foreach($_SERVER as $key=>$value)
                echo $key."\t"."$value"."<br />";

?>
 

通过浏览器访问确认相关参数

有了这个特征就很好判断了….

首先需要有一个正则来匹配日志里的两个IP,Nginx正则依赖pcre库...

 代码如下 复制代码

[root@ipython conf]# pcretest
PCRE version 7.8 2008-09-05

  re> '^\d+.\d+.\d+.\d+\W\s\d+.\d+.\d+.\d+$'
data> 192.168.1.1, 1.1.1.1
 0: 192.168.1.1, 1.1.1.1

Nginx配置文件在location $dir 中加入条件来匹配http_x_forwarded_for:
#proxy
if ($http_x_forwarded_for ~ '^\d+.\d+.\d+.\d+\W\s\d+.\d+.\d+.\d+$'){
    return 503;
}
 

重载配置后就可以限制使用代理IP来访问的网站用户了

时间: 2024-08-02 22:50:23

linux中配置Nginx 拒绝代理访问教程的相关文章

linux中配置Nginx 拒绝代理访问

  先大概说说简单的结构-前端一个Nginx反向代理,后端一个Nginx instance app for PHP-实际上就是个Discuz,之前面对CC攻击都是预警脚本或者走CDN,但是这次攻击者不再打流量,而是针对数据库请求页面进行攻击,如search操作-帖子ID F5等..从日志分析来看是从3个URL着手攻击的,当时使用Nginx 匹配$query_string 来return 503-不过会导致页面不能访问,所以想到这么一个折中的办法. 首先你看一段代理请求的日志: ##通过分析,在后

linux中配置Nginx支持IPV6协议的教程

IPV6已经叫嚣了好多年,但是一般的服务还是以IPV4为主的,虽然很多应用商或者web服务器已经提供了IPV6的访问,但是距离大规模使用,估计还是更长的时间的.编译Nginx的时候一定要编译:--with-ipv6,不然无法使用!! 1:同时监听IPV4+IPV6的80端口  server {         listen     [::]:80;          } 2:分别监听IPV4+IPV6的80端口 server {         listen 80;         listen

基于CentOS 7配置Nginx反向代理

Nginx作为反向代理服务器被广泛使用在各大互联网企业.它简单易用,可以根据业务的需求将其不同的业务类型代理至不同的服务器,将整个站点请求压力按类型分摊到不同的服务器.该方式使的整个站点请求性能得以极大的提升.本文简要描述了Nginx几种不同情形的代理演示,供大家参考. 一.反向代理及演示环境描述 1.反向代理 在计算机网络中,反向代理是一种代理服务器,代表客户端从一个或多个服务器检索资源.然后将这些资源返回给客户机,就像它们源自Web服务器本身一样.与正向代理相反,正向代理是与其关联的客户端联

Linux 中如何通过命令行访问 Dropbox

Linux 中如何通过命令行访问 Dropbox 在当今这个多设备的环境下,云存储无处不在.无论身处何方,人们都想通过多种设备来从云存储中获取所需的内容.由于拥有漂亮的 UI 和完美的跨平台兼容性,Dropbox 已成为最为广泛使用的云存储服务. Dropbox 的流行已引发了一系列官方或非官方 Dropbox 客户端的出现,它们支持不同的操作系统平台. 当然 Linux 平台下也有着自己的 Dropbox 客户端: 既有命令行的,也有图形界面客户端.Dropbox Uploader是一个简单易

linux中安装Zend Optimizer与eAccelerator教程

eAccelerator与Zend Optimizer是一个加速软件了,我们可以利用它与php环境同步运行使用得php性能更好了,下面来一起看看linux中安装Zend Optimizer与eAccelerator教程 下载Zend Optimizer http://downloads.zend.com/optimizer/3.3.9/ZendOptimizer-3.3.9-linux-glibc23-i386.tar.gz tar -xzvf ZendOptimizer-3.3.9-linux

配置nginx反向代理jira并实现https

配置nginx反向代理jira并实现https 配置Tomcat 在本文中,我们设置可以在地址http://jira.aniu.so/jira(标准HTTP端口80)上访问JIRA,而JIRA本身可以使用上下文路径/ jira监听端口8080. 修改配置文件server.xml(在jira安装目录下) 更改前: <Context docBase="${catalina.home}/atlassian-jira" path="" reloadable="

linux 中配置apache 网站 编码设置为gb2312 浏览乱码

问题描述 linux 中配置apache 网站 编码设置为gb2312 浏览乱码 httpd.conf 添加了 AddDefaultCharset GB2312? 网页添加了 浏览器浏览的时候默认编码格式还是utf-8 显示乱码 解决方案 将环境变量LANG设置LANG="zh_CN GBK"

linux中配置vnc遇到的问题

问题描述 linux中配置vnc遇到的问题 把 -nolisten tcp也是一样的结果,请问该怎么修改? 解决方案 显示器设置不对,所以vnc无法启动 解决方案二: 把 vncservers 里面 后加的两个#号去掉.

如何在 CentOS Linux 中配置 MariaDB 复制

如何在 CentOS Linux 中配置 MariaDB 复制 这是一个创建数据库重复版本的过程.复制过程不仅仅是复制一个数据库,同时也包括从主节点到一个从节点的更改同步.但这并不意味着从数据库就是和主数据库完全相同的副本,因为复制可以配置为只复制表结构.行或者列,这叫做局部复制.复制保证了特定的配置对象在不同的数据库之间保持一致. Mariadb 复制概念 备份 :复制可以用来进行数据库备份.例如,当你做了主->从复制.如果主节点数据丢失(比如硬盘损坏),你可以从从节点中恢复你的数据库. 扩展