dongnan
总版主
总版主
  • 粉丝52
  • 发帖数2165
  • 铜币13236枚
  • 威望5838点
  • 银元150个
  • 社区居民
  • 最爱沙发
  • 忠实会员
  • 原创写手
阅读:2122回复:1

nginx 保护网站后台

楼主#
更多 发布于:2016-01-08 09:16
目标
1. 判断 haproxy 负载均衡传递的 http_x_forwarded_for 变量,确定是否允许访问服务器;
2. 应用场景,如网站后台,只允许办公室网络IP 访问;

环境
browser -> haproxy -> nginx

方法
1. 修改 nginx 虚拟主机配置文件,添加以下语句
if ($http_x_forwarded_for != 114.242.XXX.93) {
    return 404;
}

2. 重新加载
nginx -t && nginx -s reload

扩展
Forwarding Visitor’s Real-IP + Nginx Proxy/Fastcgi backend correctly
#
if ($http_x_real_ip != 115.115.82.210) {
               return 403;
       }
 
nginx x-forwarded-for的深度挖掘
        
  
X-Forwarded-For:简称XFF头,它代表客户端,也就是HTTP的请求端真实的IP,只有在通过了HTTP
代理或者负载均衡服务器时才会添加该项
它不是RFC中定义的标准请求头信息,在squid缓存代理服务器开发文档中可以找到该项的具体先容。

标准格式如下:
X-Forwarded-For: client1, proxy1, proxy2

从标准格式可以看出,X-Forwarded-For头信息可以有多个,中间用逗号分隔,第一项为真实的客户端ip,剩下的就是曾经经过的代理或负载均衡的ip地址,经过几个就会出现几个。

当用户请求经过CDN后到达Nginx负载均衡服务器时,其X-Forwarded-For头信息应该为客户端IP,CDN的IP。但实际情况并非如此,一般情况下CDN服务商为了自身安全考虑会将这个信息做些改动,只保存客户端IP。我们可以通过php程序获得X-Forwarded-For信息或者通过Nginx的add header方法来设置返回头来查看。
 
扩展:[php] 使用 HTTP_X_FORWARDED_FOR 获取客户端地址
#
dongnan
总版主
总版主
  • 粉丝52
  • 发帖数2165
  • 铜币13236枚
  • 威望5838点
  • 银元150个
  • 社区居民
  • 最爱沙发
  • 忠实会员
  • 原创写手
沙发#
发布于:2017-08-08 15:29
nginx 保护特定URL页面
目标
判断 remote_addr 变量,只允许办公室网络IP 访问网站后台页面;

环境

browser -> nginx ;
注意,没有通过反向代理;

方法
修改 nginx 虚拟主机配置文件
   location ^~ /admin.php {
      if ($remote_addr !~ 'your_office_ip') {
        return 403;
      }

      # 注意
      fastcgi_pass php-server:9000;
      fastcgi_index index.php;
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
      include fastcgi_params;
    }

验证
非办公室IP 访问网站后台。
curl -IL http://zongming.net/admin.php
HTTP/1.1 403 Forbidden
Server: nginx
Date: Fri, 26 May 2017 03:15:15 GMT
Content-Type: text/html; charset=utf8
Content-Length: 162
Connection: keep-alive
Keep-Alive: timeout=10

#
游客

返回顶部