在Nginx中配置基于URI的访问控制列表(ACL)可以实现精细化的反向代理控制。以下是几种常见的实现方式:
server {
listen 80;
server_name example.com;
# 允许访问的URI路径
location /public/ {
proxy_pass http://backend_server;
}
# 禁止访问的URI路径
location /private/ {
return 403;
}
# 其他路径默认处理
location / {
proxy_pass http://backend_server;
}
}
server {
listen 80;
server_name example.com;
# 允许访问特定模式的URI
location ~ ^/(images|css|js)/ {
proxy_pass http://backend_server;
}
# 禁止访问包含敏感关键词的URI
location ~* /(admin|config|backup) {
return 403;
}
}
map $uri $is_allowed {
default 1;
~^/admin 0;
~^/private 0;
~^/config 0;
}
server {
listen 80;
server_name example.com;
location / {
if ($is_allowed = 0) {
return 403;
}
proxy_pass http://backend_server;
}
}
server {
listen 80;
server_name example.com;
location / {
# 检查URI参数
if ($args ~* "token=([^&]+)") {
set $token $1;
# 这里可以添加token验证逻辑
}
# 没有token的访问
if ($args !~* "token=") {
return 403;
}
proxy_pass http://backend_server;
}
}
geo $allowed_uri {
default 0;
192.168.1.0/24 1;
}
server {
listen 80;
server_name example.com;
location /restricted/ {
if ($allowed_uri = 0) {
return 403;
}
proxy_pass http://backend_server;
}
}
# 示例:记录被拒绝的访问
log_format acl_log '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" $is_allowed';
server {
access_log /var/log/nginx/acl.log acl_log;
# ...其他配置...
}
通过以上方法,您可以灵活地实现基于URI的反向代理访问控制,满足不同场景下的安全需求。