где есть значение нашего главного домена и всех поддоменов(последнее пока не обязательно)
3) Блокировать всех остальных
крутил в сторону
``` location /test {
if ($http_origin = "") {
return 200;
proxy_pass https://1.1.1.1:433;
}
if ($http_origin ~ '^https?://(localhost|www\.site\.ru|site\.ru)') {
return 200;
}
proxy_pass https://1.1.1.1:443;
proxy_ssl_server_name on;
proxy_ssl_name site.ru;
proxy_set_header Host site.ru;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
}```
проверяю curl -v -I https://site.ru/test вижу HTTP/2 200 в браюзере предлагает скачать файл test седержимое пустое. Короче заблудился я
map $http_origin $deny { ~^https?://(localhost|(www\.)?site\.ru) ''; '' ''; default 1; } server { ... location /test { if ($deny) { return 403; } ... } }
Но из соображений производительности рекомендую перечислить все возможные варианты origin явно, а не использовать regex. Тогда это будет hash-driven map table со сложностью вычисления O(1)
я не силен map эти типа алиас? if ($deny) { return 403; } выкинет если истино (~^https?://(localhost|(www\.)?site\.ru)) то есть если в origin значение https://site.ru (то есть моего сайта и это не ок)
понял ну тогда например ```if ($http_origin = ‘https://mysite.ru’)```
http://nginx.org/ru/docs/http/ngx_http_map_module.html Перед тем, как задавать дальнейшие вопросы, рекомендую прочесть документацию Там не сильно много текста
пасиб по части map ознакомился, остальное тоже прочту
Всё, что не совпало с regex шаблоном и не пустая строка, даст в результате 1, и тогда сработает if В противном случае результат - пустая строка, if не сработает
map в location можно засунуть? просто хочу тренироваться сперва на /test ентрипоинте
map нельзя засунуть даже в server map должен быть описан в контексте http Не вижу, чем это может помешать тренироваться только там, где надо
В location тебе надо засунуть if Какая тебе разница, где находится map? Переменная вычисляется только при обращении к ней lazy evaluation
без regex map $http_origin $deny { https://www.myssite.ru ''; '' ''; default 1; } server { ... location /test { if ($deny) { return 403; } ... } } или в https://www.myssite.ru (нужно экранировать часть элементов)
Без regex это перечислить все возможные варианты map $http_origin $deny { http://mysite.ru ''; https://mysite.ru ''; http://www.mysite.ru ''; https://www.mysite.ru ''; '' ''; default 1; }
Обсуждают сегодня