nginx配置跨域多个ip
时间: 2025-01-09 11:38:23 浏览: 0
### 配置 Nginx 允许多个 IP 跨域访问
为了使 Nginx 支持来自多个特定 IP 的跨域请求,可以利用 `map` 模块定义一系列规则来匹配这些 IP 地址,并将其映射到相应的响应头部。具体做法如下:
#### 使用 Map 定义 IP 白名单
在 HTTP 块中加入一段用于创建自定义变量 `$allowed_ip` 的配置,该变量会依据客户端的真实 IP 是否属于预设列表而被赋予不同的值。
```nginx
http {
...
# 创建一个名为 allowed_ip 的变量用来存储允许的 CORS 请求源
map $remote_addr $allowed_ip {
default ""; # 默认为空字符串表示不允许任何地址
"192.168.1.10"; # 明确列出每一个可信任的具体 IPv4 地址
"192.168.1.11";
"~^(10\.|172\.(1[6-9]|2[0-9]|3[0-1])\.|192\.168\.)" "$remote_addr";
# 正则表达式形式支持整个私有网段内的任意主机作为合法来源
}
}
```
上述代码片段展示了如何通过正则表达式模式匹配的方式将某些内部网络中的设备纳入许可范围之内[^4]。
#### 设置 Location 中的相关 Header
接着,在对应站点的服务区块里应用这个新建立好的变量至实际返回给前端浏览器端的安全策略头字段之中:
```nginx
server {
listen 80;
server_name example.com;
location /api/ {
if ($allowed_ip != "") {
add_header 'Access-Control-Allow-Origin' "$allowed_ip";
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,B Cache-Control,Content-Type';
# 对于非简单请求(如PUT DELETE),还需要处理OPTIONS方法预检请求
if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Max-Age' 1728000;
add_header 'Content-Type' 'text/plain charset=UTF-8';
add_header 'Content-Length' 0;
return 204;
}
}
try_files $uri $uri/ =404;
}
}
```
这段脚本说明了怎样根据之前设定的条件动态调整响应消息里的CORS相关属性,从而确保只有那些经过验证后的远程连接才能成功执行跨站资源共享操作。
阅读全文