Я делаю довольно неприятные вещи с nginx.Вот вид с высоты птичьего полета.
nginx играет роль посредника между мириадами ведер S3.Чтобы определить правильный сегмент, я использую сценарии Lua поверх платформы OpenResty.
Итак, сначала запрос входит в /
местоположение и обрабатывается сценарием Lua.
location / {
listen 8001;
server_name $hostname;
access_by_lua_file '/srv/hostingrouter/live/hostingrouter/storerouter.lua';
proxy_pass http://$remote;
}
location ~ /s3/(?<s3_key>.+) {
internal;
proxy_pass $s3;
rewrite .* /$s3_key break;
}
Я не могу показать вам полный скрипт Lua из-за NDA (надеюсь, вы меня понимаете), но он выполняет следующий вызов где-то между условиями:
return ngx.exec(
'/s3/' .. s3_key
)
Сложность в том, что скрипт Lua также выполняет некоторые другие перенаправления.Но только в этом конкретном случае, показанном выше, мне нужно переписать URL-адрес с HTTP на HTTPS.
Я считаю, что rewrite http:// https:// break;
не сработает, потому что у совпавшего пути нет схемы (я тоже пробовал и этоне работал).Более того, я попытался выполнить условное перенаправление:
if ($scheme = http) {
return 301 https://$host$request_uri;
}
, но это привело к перенаправлению цикла.
Как перенаправить с HTTP на HTTPS из внутреннего расположения?