haproxy配置
haproxy作为负载均衡可以根据域名和路径来限制访问,
第一、根据域名,配置如下:
acl good_guy src 10.10.10.10 100.100.100.100
acl is_domain hdr_beg(host) -i www.xxx.com
http-request deny if !good_guy is_domain
use_backend web1 if is_domain
backend web1
mode http
balance roundrobin
server admin1 10.104.10.188:8200 check
mode http
balance roundrobin
server admin1 10.104.10.188:8200 check
第二、根据路径
acl test_uri path_beg -i /register-register
acl test_uri1 path_beg -i /sms-regPhoneCode.html
http-request deny if test_uri is_m_e_cn
http-request deny if test_uri1 is_m_e_cn
nginx配置
nginx可以根据location来设置,但是需要注意的是,如果你的路径后面是php,而且是一级路径,那么你要加入php解析,不然就变成了下载了。
如下是wordpress的后台登录限制。
location = /wp-login.php {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
root html/blog;
fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
include ../conf/fastcgi.conf;
allow 192.168.0.208;
deny all;
}
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
root html/blog;
fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
include ../conf/fastcgi.conf;
allow 192.168.0.208;
deny all;
}
由于wp-login.php是php程序,你访问的时候直接匹配了,所以不会匹配下面的php解析,如果index index.php这样指定了,也是不会解析的。上面的=可以换成~,~*,^~都可以,但是前提是php的 解析程序要放在此location的下面,因为location 的配置也有优先级。
顺序如下:
(location =) > (location 完整路径) > (location ^~ 路径) > (location ~,~* 正则顺序) > (location 部分起始路径) > (/)
= 开头表示精确匹配
^~ 开头表示uri以某个常规字符串开头,理解为匹配 url路径即可。nginx不对url做编码,因此请求为/static/20%/aa,可以被规则^~ /static/ /aa匹配到(注意是空格)。“^~ ”符号(^ 表示“非”,~ 表示“正则”,字符意思是:不要继续匹配正则)
~ 开头表示区分大小写的正则匹配
~* 开头表示不区分大小写的正则匹配
!~和!~*分别为区分大小写不匹配及不区分大小写不匹配 的正则
/ 通用匹配,任何请求都会匹配到。
其中“~ ”和“~* ”前缀表示正则location ,“~ ”区分大小写,“~* ”不区分大小写;其他前缀(包括:“=”,“^~ ”和“@ ”)和无任何前缀的都属于普通location 。
原文链接:haproxy和nginx后台只允许固定ip登录说明,转载请注明来源!