nginx 正则处理跨域请求

场景模拟,现在只允许所有的 a.com 和b.com 的跨域请求

一、nginx直接处理options请求(跨域预检)

nginx直接返回options请求的优点

1、可以在nginx层面控制options配置,方便管理

2、在nginx处理可以减少后端服务器的压力

location 下使用set if 匹配options 返回对应的请求头

set $cors_origin "";
    if ($http_origin ~* ^https?://(.*\.)?(a.com|b.com)) {
    set $cors_origin $http_origin;
    }
   if ($request_method = 'OPTIONS') {
    add_header Access-Control-Allow-Origin $cors_origin;
    add_header Access-Control-Allow-Credentials true;
    add_header Access-Control-Allow-Methods GET,HEAD,POST,OPTIONS;
    add_header Access-Control-Allow-Headers $http_access_control_request_headers;
    add_header Allow GET,HEAD,POST,OPTIONS;
    add_header Access-Control-Max-Age 3600;
    return 200;
}

二、nginx在上游响应的头部增加跨域的请求头

location 下匹配域名增加对应域名的请求头

if ($http_origin ~ ^https?://(.*\.)?(a.com|b.com)){
        add_header Access-Control-Allow-Origin $http_origin;
   }

三、全局使用map 声明跨域的返回值(这个可以更加灵活的使用变量和nginx别的配置)

map配置声明cors_origin 的值,需要结合别的配置增加跨域请求头的配置

map $http_origin $cors_origin {
default  "";
^https?://(.*\.)?(a.com|b.com) $http_origin;
}

要配置Nginx以忽略请求,你可以通过以下步骤进行设置: 1. 打开Nginx配置文件,通常位于/etc/nginx/nginx.conf。 2. 在http块中添加一个变量$allow_cors来控制是否允许请求。默认情况下,将该变量设置为1,表示允许请求。 3. 添加一个server块来监听特定的端口(例如8180)。 4. 在server块内添加一个if语句来检查$allow_cors变量的值。如果$allow_cors等于0,则返回403禁止访问。 5. 配置location指令来指定需要处理的路径。你可以使用正则表达式来匹配路径,如"/index"和"/accusation"。 6. 在location块内使用proxy_pass指令将请求转发给后端服务。 7. 保存和关闭配置文件。 8. 重新启动Nginx服务,使配置生效。 以下是一个示例配置: ```nginx worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; map $http_origin $allow_cors { default 1; "~^(https?://(localhost)(:[0-9])?)$" 1; "~*" 0; } server { listen 8180; if ($allow_cors = 0) { return 403; } location / { root html; index index.html index.htm; } location /index { proxy_pass http://localhost:8080/accusation; } location /accusation { proxy_pass http://localhost:8080/accusation; } } } ``` 另外,你还可以使用正则表达式来匹配指定的路径并禁止请求。下面是一个示例配置: ```nginx worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; map $http_origin $allow_cors { default 1; "~^(https?://(localhost)(:[0-9])?)$" 1; "~*" 0; } server { listen 8180; if ($request_uri ~ ^accu.*$) { set $allow_cors "2$allow_cors"; } if ($allow_cors = "21") { return 403; } location / { root html; index index.html index.htm; } location /index { proxy_pass http://localhost:8080/accusation; } location /accusation { proxy_pass http://localhost:8080/accusation; } } } ``` 这样配置后,Nginx将忽略请求,并只允许特定的请求通过。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值