nginx限制来路域名和指定user-agent对接口的请求



概述: 在一些情况中,我们会有这样的需求,比如有的接口只暴露给指定的域名能请求,但接口配置文件在统一的子配置文件中,全局通过include的方式,载入到每个server中,这时我们除了将响应的配置单独存放出来,另外还可以使用nginx的set指令就能很好的控制这种需求。下面来看看具体的方法。


例如我们有一个统一的配置文件def.conf,默认会载入每个server配置种,其中部分内容如下:

......

       location /api/sso {
                proxy_pass   http://sso_api/;
                proxy_redirect          off;
                proxy_next_upstream     error timeout invalid_header http_500;
                proxy_connect_timeout   1;
                proxy_set_header  Host  $host;
                proxy_set_header  X-Real-IP  $remote_addr;
                proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
                client_max_body_size 10m;
        }

       location /api/pay {
                proxy_pass   http://pay_api/;
                proxy_redirect          off;
                proxy_next_upstream     error timeout invalid_header http_500;
                proxy_connect_timeout   1;
                proxy_set_header  Host  $host;
                proxy_set_header  X-Real-IP  $remote_addr;
                proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
                client_max_body_size 5m;
        }

        location /api/limit {
               set $allow '';
               if ( $server_name ~* "www.a.com" ) {
                       set $allow 1;
               }
              if ( $http_user_agent ~* "(limittest|hellotest)" ){set $allow 1;}
                      if ( "$allow" != 1 ) {
                       return 401;
              }

                proxy_pass   http://limit_api/;
                proxy_redirect          off;
                proxy_next_upstream     error timeout invalid_header http_500;
                proxy_connect_timeout   1;
                proxy_set_header  Host  $host;
                proxy_set_header  X-Real-IP  $remote_addr;
                proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
                client_max_body_size 1m;
}

.........



说明:在上述def.conf配置中,因为整个配置文件默认都会被载入,但需求是 /api/limit服务限制在指定域名下可以被请求,以及用户UA为指定的可以被请求。

当然,如果我只是争对个别域名可以正常请求,或者其它的条件,我们也可直接使用如下方式即可:

               if ( $server_name !~* "www.a.com" ) {
                       return 401;
               }








本文标签: nginx 域名 接口请求

内容版权声明:【蓝色网居】部分资源来源于网络,如有侵犯您的所有权,请随时告知我们,我们将立即删除!感谢配合!

转载请注明出处:https://blog.ff56.cn/web/1658845729.html


【手机扫一扫查看文本】

手机扫一扫 手机扫一扫查看文本 手机扫一扫





白名单 请求频率 404自定义 错误日志 防IP $host 编译安装 访问控制 跳转 域名 跳转rewrite 扫描访问 后台管理 参数重写 语言选择 自启动 或(or) apache pass_proxy的使 large body 强匹配 案例分析 $http_host geoIP模块 nginx插件 ip白名单 恶意请求 lua ngx_cache_pu 重写