Nginx限制可以跨域的域名

721 阅读1分钟

在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;
        }

    }

}

原文地址:www.cnblogs.com/changxy-cod…