Предотвратить 500 внутренних ошибок сервера при обслуживании большого количества фотографий через библиотеку миниатюр PHP

0

У меня есть веб-сайт, который позволяет пользователям добавлять (загружать) фотографии в альбомы.

Чтобы защитить фотографии, они хранятся в папке снаружи /public_html и отображаются на страницах через скрипт PHPThumb, который отображает небольшие измененные версии фотографий с более низким качеством (поскольку фотографии с высоким разрешением могут быть загружены), а также позволяет пользователям добавить свой водяной знак к фотографиям.

Моя проблема в том, что иногда, когда есть большой трафик на конкретный альбом (страница), некоторые фотографии не отображаются, или на всей странице отображается 500 Internal Server Error (хотя я использую разбиение на страницы и показываю только 40 фотографий на страницу). Это займет несколько секунд, а иногда и за несколько минут до возвращения сайта.

Я думал, что использование миниатюрной библиотеки уменьшит нагрузку, потому что сервер не должен отправлять все фотографии с высоким разрешением, а только измененные версии. Но, похоже, это не так.

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

Любые предложения по предотвращению ошибки 500?

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

Теги:
webserver
http-status-codes

1 ответ

0
  1. Эти миниатюры не генерируются "на лету" по каждому запросу, и они кэшируются, верно? Если нет, вы можете начать с этого момента.

  2. Сохранение исходного изображения за пределами общедоступного каталога имеет смысл, но вы можете рассмотреть возможность сохранения миниатюр внутри общего каталога, чтобы вы могли обслуживать их напрямую, без обработки.

  3. Также убедитесь, что вы отправляете правильные заголовки кеша, когда вы обслуживаете эти миниатюры. Учитывая, что миниатюра является небольшой копией более крупной версии, она не изменится, поэтому вы можете установить дату истечения срока действия очень далеко.

    3.1 Однако в вашем случае вы позволяете пользователю помещать водяной знак на миниатюры, поэтому вы можете кэшировать миниатюры на основе этого водяного знака. Вы можете записать изображение + водяной знак и получить имя миниатюры. Если водяной знак изменится, также имя миниатюры будет отличаться, поэтому заголовки с превышением кэша "далеко вперед" не укусят вас.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню