在nginx做跨域时候,所时候会限制可以进行跨域的域名。
大致的思路是根据origin建立一个白名单列表,不在列表里面的域名,进行错误返回。
不存在跨域访问的请求头里没有origin,所以空的origin也需要添加进白名单中。
配置如下:
1、在http中定义一个通过map指令,定义跨域规则并返回是否合法
map $http_origin $allow_cros {
"~^(https?://(www.xxxxxx.cn)?)$" 1;
"~^\s" 1;
"~*" 0;
}
上述规则中,如果orgin的值为指定的origin或者空字符串,我们认为是合法的请求,返回数值1,如果是其它值,返回数值0;
2、在server中根据$allow_cros的值进行请求拦截
if ($allow_cros = 0){
return 403;
}
完整配置参考:
http {
include 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 logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
map $http_origin $allow_cros {
"~^(http?://(dmp.xxxxxx.cn)?)$" 1;
"~^\s" 1;
"~*" 0;
}
server {
listen 80;
server_name localhost;
if ($allow_cros = 0){
return 403;
}
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
proxy_pass http://192.168.10.105;
}
}
}