Я использую nginx и хочу блокировать запросы на публикацию, размещение и удаление, когда они приходят от неизвестного реферера.
То есть, у меня есть реферер: " .example.com", и от этого реферера я хочу разрешить все GET, PUT и POST (да, я знаю, что легко подделать реферер ...), если " .example.com" не реферер, только GET должен быть разрешен.
Все решения, с которыми я пришел, не работают ...
Я хотел бы иметь это на блоке сервера, чтобы сделать все чисто (я использую очень большой файл со всеми расположениями).
Мой первый подход был:
limit_except none block имя_сервера * .example.com {if ($ http_request! = GET) {запретить все; }
Но я не могу вкладывать, если ...
Затем я попробовал это:
карта $ http_referer $ allow_referer {по умолчанию 0; "~ example.com" 1; } map $ allow_referer $ disallow_referer {0 1; 1 ""; }
местоположение ... {... if ($ invalid_referer) {limit_except GET {запретить все; }}}
То же, что и выше. Затем я использовал файл конфигурации, который нашел в сети, с некоторыми изменениями:
установить $ cors '';
if ($ http_origin ~ * (https?: //.*.example.com (: [0-9] +)?)) {set $ cors "true"; }
if ($ request_method = 'OPTIONS') {set $ cors "$ {cors} options"; }
if ($ request_method = 'GET') {set $ cors "$ {cors} get"; }
if ($ request_method = 'POST') {set $ cors "$ {cors} post"; }
if ($ request_method = 'PUT') {set $ cors "$ {cors} put"; }
if ($ request_method = 'DELETE') {set $ cors "$ {cors} delete"; }
if ($ cors = "trueget") {return 200; }
if ($ cors = "truepost") {return 403; }
if ($ cors = "trueput") {return 403; }
if ($ cors = "truedelete") {return 403; }
Кажется, очень чисто, но не работает.
Есть ли способ к этому?
источник