我正在使用 nginx,我想阻止来自未知引用者的发布、放置和删除请求。
意思是,我有推荐人:“. example.com”,如果“ .example.com ”,我想从这个推荐人允许所有 GET、PUT 和 POST(是的,我知道这很容易伪造推荐人......)不是推荐人,只有 GET 应该被允许。
我提供的所有解决方案都不起作用...
我想把它放在服务器块上以使一切都干净(我使用一个非常大的文件来包含所有位置)。
我的第一种方法是:
limit_except none block server_names *.example.com { if ($http_request != GET) { 全部拒绝;}
但是,我不能嵌套 if ...
然后,我尝试了这个:
地图 $http_referer $allow_referer { 默认 0; “~example.com”1;} 映射 $allow_referer $disallow_referer { 0 1; 1个“”;}
location ... { ... if ($invalid_referer) { limit_except GET { 全部拒绝;} } }
和上面一样。然后,我使用了在网上找到的配置文件,并进行了一些修改:
设置 $cors '';
if ($http_origin ~* (https?://.*.example.com(:[0-9]+)?)) { set $cors "true"; }
if ($request_method = 'OPTIONS') { 设置 $cors "${cors}options"; }
if ($request_method = 'GET') { 设置 $cors "${cors}get"; }
if ($request_method = 'POST') { 设置 $cors "${cors}post"; }
if ($request_method = 'PUT') { 设置 $cors "${cors}put"; }
if ($request_method = 'DELETE') { 设置 $cors "${cors}delete"; }
if ($cors = "trueget") { 返回 200; }
if ($cors = "truepost") { 返回 403; }
if ($cors = "trueput") { 返回 403; }
if ($cors = "truedelete") { 返回 403; }
看起来很干净但是没有用。
有什么办法吗?
我将此添加到服务器块中并且它可以工作: