nginx访问控制:如何通过map来控制http_x_forwarded_for访问限制

本文介绍如何使用Nginx的map和locationifelse指令来限制特定IP地址的访问,确保只有预设的IP地址可以访问服务器,提高系统的安全性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通过map修改访问限制

目前,仓库通过allow host的方式来控制访问,但实际上没有启到作用,请求从lb过来,host已经变化,所以需要用http_x_forwarded_for来做限制。

允许访问ip
19.29.55.15 13.56.217.135 211.22.42.100 119.9.14.149其他都403
影响范围:

不升级的情况下不影响
实现方法:
1、map(用于http段)
2、location if else来判断(server)

map:

map $http_x_forwarded_for $access
{

default false;
123.56.27.15 true;
123.103.7.29 true;
101.21.57.187 true;
221.12.42.100 true;
116.7.37.5 true;
10.150.189.186 true;
41.29.245.18 true;
}if ( $access = 'false')
{
return 403;
}

location:

set $access false;

if ( $http_x_forwarded_for = '123.56.27.135' ) {

set $access true;

}
if ( $http_x_forwarded_for = '119.29.144.149' ) {

set $access true;

}
if ( $http_x_forwarded_for = '119.29.55.135' ) {

set $access true;

}
if ( $http_x_forwarded_for = '221.122.42.100' ) {

set $access true;

}
if ( $access = 'false') {

return 403;

}

user nginx; worker_processes auto; error_log /var/log/nginx/error.log notice; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; #tcp_nopush on; keepalive_timeout 65; upstream gateway { server 10.2.96.171:8080; } map $http_upgrade $connection_upgrade { default upgrade; '' close; } #gzip on; server{ listen 8000; server_name _; location / { if ($request_method !~ ^(GET|POST|HEAD|PUT|DELETE|OPTIONS)$) { return 444; } proxy_pass http://10.2.96.171:18000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } } server{ listen 8001; server_name _; location / { proxy_pass http://10.2.96.171:18001; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; if ($request_method !~ ^(GET|POST|HEAD|PUT|DELETE|OPTIONS)$) { return 444; } } } server { listen 20443 ssl ; ssl_certificate /data/infra/nginx/gotion.com.cn.crt; server_name 10.2.96.171; ssl_certificate_key /data/infra/nginx/gotion.com.cn.key; ssl_prefer_server_ciphers on; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers HIGH:!aNULL:!MD5; ssl_buffer_size 4k; ssl_session_cache shared:SSL:50m; ssl_session_timeout 4h; root /data/infra/nginx/html; location / { add_header 'Access-Control-Allow-Origin' 'https://10.2.96.171'; try_files $uri /index.html; } location /api/ { proxy_pass http://10.2.96.171:8080/; add_header 'Access-Control-Allow-Origin' 'https://10.2.96.171'; proxy_cookie_path /oauth /; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Cookie $http_cookie; proxy_read_timeout 30000; proxy_send_timeout 30000; client_max_body_size 1024m; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; } location ~* ^/(mio) { proxy_buffering off; proxy_set_header X-Forwarded-Proto $scheme; client_max_body_size 1024m; proxy_http_version 1.1; proxy_set_header Connection ""; chunked_transfer_encoding off; proxy_pass http://10.2.96.171:9000; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $http_host; rewrite ^/mio/(.*)$ /$1 break; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } } 帮我修改这个配置 要求 不配置https证书
03-26
server { listen 9007; server_name localhost; client_max_body_size 600M; proxy_connect_timeout 60s; # 代理连接超时时间 proxy_read_timeout 60s; # 代理读取超时时间 proxy_send_timeout 60s; # 代理发送超时时间 fastcgi_read_timeout 60s; # FastCGI 读取超时时间 send_timeout 60s; # 发送数据超时时间 #前端打的dist资源存放目录 root D:/ZrWrjServer/nginx-1.18.0/html; # 静态资源的缓存和压缩设置 location ~* ^/a-map/(.*)$ { alias /home/map/AMap/AMap/$1; etag on; expires 24h; gzip on; gzip_types image/jpeg image/png image/gif image/jpg; } location ~* ^/map-image/(.*)$ { alias /home/map/AMap/AMap/$1; etag on; expires 24h; gzip on; gzip_types image/jpeg image/png image/gif image/jpg; } location / { # 用于配合 browserHistory使用 try_files $uri $uri/ /index.html; } location /power-system/ { proxy_pass http://10.168.1.105:9006/power-system/; proxy_redirect off; #真实IP获取 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; set $my_proxy_add_x_forwarded_for $proxy_add_x_forwarded_for; if ($proxy_add_x_forwarded_for ~* "127.0.0.1"){ set $my_proxy_add_x_forwarded_for $remote_addr; } proxy_set_header X-Forwarded-For $my_proxy_add_x_forwarded_for; } location /api/ { proxy_pass http://10.168.1.105:9006/power-system/; proxy_redirect off; #真实IP获取 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; set $my_proxy_add_x_forwarded_for $proxy_add_x_forwarded_for; if ($proxy_add_x_forwarded_for ~* "127.0.0.1"){ set $my_proxy_add_x_forwarded_for $remote_addr; } proxy_set_header X-Forwarded-For $my_proxy_add_x_forwarded_for; } location /static/defect { # 设置缓存过期时间,例如1天 expires 1d; # 添加Cache-Control头,控制缓存行为 add_header Cache-Control "public"; root /power/defect; } location /static/video { # 设置缓存过期时间,例如1天 expires 1d; # 添加Cache-Control头,控制缓存行为 add_header Cache-Control "public"; root /power/video; } location /static/uav { # 设置缓存过期时间,例如1天 expires 1d; # 添加Cache-Control头,控制缓存行为 add_header Cache-Control "public"; root /power/uav; } location /static/imageManage { # 设置缓存过期时间,例如1天 expires 1d; # 添加Cache-Control头,控制缓存行为 add_header Cache-Control "public"; root /power/uav; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } 我在windows上使用这个配置但是报错2025/07/14 16:17:59 [emerg] 7236#7276: "server" directive is not allowed here in D:\ZrWrjServer\nginx-1.18.0/conf/nginx.conf:1
最新发布
07-16
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值