允许AJAX请求基于request_method在nginx代理后面进行服务

时间:2013-04-19 22:57:50

标签: ajax nginx angularjs cors

我是Nginx的新手,所以请原谅我,如果我是迟钝的话。我有一个位于nginx代理后面的服务,我使用auth_basic来阻止任何人当前能够点击它。我想允许一个Angular应用程序来点击这个服务,但我想控制谁被允许执行特定的请求方法(GET,POST,DEL,OPTIONS),并且使用auth_basic似乎不是最好的选择,因为我不喜欢我不想将登录/密码硬编码到JS(duh)中。我能弄清楚如何做到这一点的唯一方法是:

if ($request_method = OPTIONS)
{ 
        proxy_pass_header Access-Control-Allow-Origin *;
        proxy_pass_header Access-Control-Allow_Methods GET, OPTIONS;
        etc...
}

此时,我允许来自任何人的GET和OPTIONS请求,但我想将POST,DEL限制为仅限于某些位置(例如内部或来自可信IP)。但是,目前,如果我将proxy_pass_header放入该块,则表示不允许该指令。我已经看到了其他人们在if块中使用add_header的例子,所以我很困惑为什么这样做不起作用。

首先,这是最好的做事方式,如果不是,有人还有其他建议吗?如果这是处理事情的最佳方式,我在这里做错了什么?

任何帮助将不胜感激。我发现nginx文档非常混乱。

1 个答案:

答案 0 :(得分:0)

您可以使用deny/allow中的ngx_http_access_module指令。

location / {
    deny  192.168.1.1;
    allow 192.168.1.0/24;
    allow 10.1.1.0/16;
    allow 2001:0db8::/32;
    deny  all;
}

http://nginx.org/en/docs/http/ngx_http_access_module.html