@BorisKorobkov
Web developer

Как сделать 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>
  • Вопрос задан
  • 309 просмотров
Решения вопроса 1
@BorisKorobkov Автор вопроса
Web developer
Отвечу сам.

Модули контроля доступа (как то 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;
		}
	}
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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