Задать вопрос
@BorisKorobkov

Как сделать auth_request при SSI в Nginx?

Есть html-страница статьи, доступная всем. Надо на ней показать ссылку "Редактировать", доступную только некоторым юзерам.
Из статьи (test1.html) подключаю по SSI ссылку (test2.html), но почему то права на нее не проверяются. При прямом обращении из браузера - проверяются. Как заставить проверять при SSI?

test1.html (статья)
test1
<!--# include file="/test2.html" -->

(include virtual тоже пробовал)

test2.html (ссылка)
test2

Конфиг сайта в nginx:
server {
	ssi on;
	
	location = /test1.html {
	}

	location = /test2.html {
		auth_request /test_auth;
	}

	location = /test_auth {
		return 403;
	}

	# ...
}


Выводится при обращении к test1.html:
test1
test2


Должно выводиться:
test1
<403>


Выводится при обращении к test2.html (так и должно):
<403>
  • Вопрос задан
  • 319 просмотров
Подписаться 3 Средний Комментировать
Помогут разобраться в теме Все курсы
  • REBRAIN
    LEPP Stack
    2 месяца
    Далее
  • Академия Эдюсон
    DevOps-инженер + ИИ
    7 месяцев
    Далее
  • ProductStar × РБК
    Профессия DevOps-инженер + ИИ
    5 месяцев
    Далее
Решения вопроса 1
@BorisKorobkov Автор вопроса
Отвечу сам.

Модули контроля доступа (как то auth_basic, access и auth_request) не проверяют подзапросы.
Предполагается, что все необходимые права были проверены на этапе обработки основного запроса.
--
Maxim Dounin
nginx.org


Поэтому я сделал так:
test1.html
test1
<!--# block name="empty" --><!--# endblock -->
<!--# include file="/test2.html" stub="empty" -->


Конфиг:
map $cookie_user_id:$request_uri $allow {
	default 0;
	1234:/path/page1.html 1;
	4567:/path/page1.html 1;
}

server {
	ssi on;

	location = /test1.html {
	}

	location = /test2.html {
		internal;
		if ($allow = 0) {
			return 403;
		}
	}
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы