Я пытаюсь использовать статический контент от S3
. Я использую скрипт nginx и lua для его конфигурации. Я новичок в nginx и lua.Nginx подает ответ с 200 даже после вызова ngx.exit()
Задача, которую я хочу достичь, это: запрос
- Получить URL в Nginx.
- Аутентификация параметров запроса URL.
- Подача от
S3
, если параметры действительны. - Отправлять ответ об ошибке, если параметры недействительны.
Мой nginx.conf
файл выглядит следующим образом:
location ~ "^/media/(.*?)/(.*?)/(.*)$" {
set $mediaUrl "$1/$2/$3";
set $key "$2/$3"
set $target http://$1.s3.amazonaws.com
rewrite_by_lua "
local uri = '/authenticate'
local res = ngx.location.capture(uri, {args = { param = '/xmedia/'.. ngx.var.mediaUrl }})
if (res.status ~= 200) then
return ngx.exit(ngx.HTTP_GONE)
end
";
rewrite .* /$key break;
proxy_pass $target;
}
location "/authenticate" {
proxy_set_header Range "";
proxy_set_header Content-Range "";
set_by_lua $param "
local params = ngx.req.get_uri_args()
return params.param
";
set $test_url http://127.0.0.1:some_port/authenticate?url=$param;
proxy_pass $test_url;
}
I мой случай, если Аутентифицировать возвращает 200, то все работает отлично. Но даже если аутентификация возвращает null
, nginx возвращает правильный файл и не дает отчета об ошибке, указанного в инструкции if
: return ngx.exit(ngx.HTTP_GONE)
.
Я что-то не так? Как эффективно выполнять ожидаемое поведение?
Спасибо.
http://wiki.nginx.org/HttpLuaModule#rewrite_by_lua Обратите внимание, что этот обработчик всегда запускается после стандартного HttpRewriteModule. –
Спасибо за ваш ответ. Но если HttpRewriteModule всегда выполняется перед rewrite_by_lua, то как я могу достичь требуемой задачи? – sonam
Использовать http://wiki.nginx.org/HttpLuaModule#ngx.exec внутри 'rewrite_by_lua' –