Безопасный способ предоставления массовых изображений для пользователей? - PullRequest
0 голосов
/ 08 февраля 2019

Я недавно настроил API для пользователей, чтобы получать информацию, и это был огромный успех.API возвращает информацию, содержащую информацию, такую ​​как Имя и ID .Затем я говорю пользователю, что он может получить подходящее изображение, просто вытащив изображение из:

mysite.com/pics/ID_Retrieved_From_API.jpg

Это работало нормально, за исключением сегодняшнего дня, когда я проснулся, когда мой сайт был полностью закрыт из-за того, что он попал в ресурслимит (виртуальный хостинг).Я проверил свои логи и заметил определенный IP-адрес, извлекая тысячи моих изображений:

[08/Feb/2019:07:06:54 +0000] "GET /pics/76600549.jpg HTTP/1.1" 508 224 "-" "python-requests/2.21.0"
[08/Feb/2019:07:06:54 +0000] "GET /pics/93700540.jpg HTTP/1.1" 508 224 "-" "python-requests/2.21.0"
[08/Feb/2019:07:06:54 +0000] "GET /pics/91000583.jpg HTTP/1.1" 508 224 "-" "python-requests/2.21.0"
[08/Feb/2019:07:06:54 +0000] "GET /pics/52300492.jpg HTTP/1.1" 508 224 "-" "python-requests/2.21.0"
[08/Feb/2019:07:06:54 +0000] "GET /pics/87400522.jpg HTTP/1.1" 508 224 "-" "python-requests/2.21.0"
[08/Feb/2019:07:06:54 +0000] "GET /pics/78400534.jpg HTTP/1.1" 508 224 "-" "python-requests/2.21.0"
[08/Feb/2019:07:06:54 +0000] "GET /pics/63100533.jpg HTTP/1.1" 508 224 "-" "python-requests/2.21.0"

Я временно заблокировал IP-адрес, чтобы восстановить мой сайт.Я не раздражен на пользователя, так как я в значительной степени поощрял это, но я не сделал, кроме кого-то, кто так агрессивно тянет изображения.Я не уверен, как действовать сейчас.Каков оптимальный способ предоставления пользователям возможности извлекать изображения?Я думал о том, чтобы сжать их все вместе, но конечным результатом был бы файл> 5 ГБ, и я думаю, что это все равно убило бы ресурсы сервера.

Я пытался ограничение скорости в cloudflare, но это не такКажется, что он работает, и когда я разблокировал IP, мои ресурсы снова исчерпаны.Мое правило ограничения скорости было:

mysite.com/pics/*
10 requests per 1 second = Block

Любой совет приветствуется.

1 Ответ

0 голосов
/ 15 февраля 2019

Мое текущее решение, которое работает хорошо, - это зарегистрировать до Облачное хранилище Google и разместить изображения для API там в корзине.

Чтобы избежать путаницы, а также, возможно, избежать этого в будущем, я добавил image_url к своему API, который указывает на местоположение изображения в Google Cloud Storage, чтобы пользователи, получающие доступ к API, могли быстро получить правильное изображениеURL-адрес для API.

Наконец, я настроил Cross-Origin Resource Sharing (CORS) в размещенном хранилище изображений, чтобы пользователи могли получить доступ к изображениям.

Это имеетнастроен примерно на 5 дней, и с тех пор у моего сайта не было проблем.Это решение, которое требует затрат, но размещение изображений в облачном хранилище Google на самом деле довольно дешево .

...