Настраиваем прокси медиа картинок с продакшена на локальном lerd сервере для WordPress сайта

Локальная копия WordPress может не содержать каталог uploads: обычно его не хранят в Git из-за размера и постоянно меняющегося состава файлов. Если сайт на продакшене использует один путь к медиа, а локальный — другой, Nginx может проксировать запросы к картинкам на прод.

В нашем случае локальный путь /app/uploads/ сопоставляется с продакшен-путём /wp-content/uploads/.

После этого WordPress и браузер продолжают запрашивать картинку с wpc.localhost, но Nginx получает файл с wpcraft.ru и возвращает его локально.

Почему картинки не скачивают локально

Медиатеку WordPress обычно не копируют с продакшена в локальное окружение, потому что файлов может быть очень много, а каталог uploads — занимать гигабайты. Для разработки такая синхронизация долгая и чаще всего не нужна.

Поэтому база данных содержит адреса вложений, но самих файлов локально нет. Чтобы изображения открывались без скачивания всей медиатеки, запросы к локальному /app/uploads/ проксируют на продакшеновый /wp-content/uploads/.

Решение: проксировать только uploads

Не нужно проксировать весь локальный сайт на прод. Достаточно перехватывать один путь — каталог загрузок.

location ^~ /app/uploads/ {
    proxy_pass <https://wpcraft.ru/wp-content/uploads/>;
    proxy_set_header Host wpcraft.ru;
    proxy_ssl_server_name on;
}

Как это работает:

  1. Браузер запрашивает http://wpc.localhost/app/uploads/....
  2. Локальный Nginx перехватывает запрос раньше, чем он попадёт в WordPress.
  3. Nginx запрашивает соответствующий файл у https://wpcraft.ru/wp-content/uploads/....
  4. Браузер получает изображение с локального домена.

Префикс ^~ важен: он даёт этому маршруту приоритет над общими правилами обработки PHP и роутинга WordPress.

proxy_set_header Host wpcraft.ru передаёт продакшену правильный домен, а proxy_ssl_server_name on включает SNI для HTTPS-соединения.

Почему Lerd

Lerd — локальное окружение для PHP-проектов на базе Podman. Оно поднимает Nginx, нужную версию PHP-FPM, базы данных и фоновые процессы без ручной настройки контейнеров для каждого проекта.

Для такого сценария Lerd удобен тем, что позволяет добавить Nginx override только для одного сайта.

Путь: ~/.local/share/lerd/nginx/custom.d/wpc.localhost.conf

Правило применяется к wpc.localhost, не попадает в Git и не меняет продакшен-конфигурацию. Это позволяет быстро приблизить локальную среду к реальному сайту, не копируя всю медиатеку на компьютер.

Фото аватара

Antony I

Веб разработчик, специализация на лучших мировых практиках: WordPress, WooCommerce, NextJS, Strapi, JAMStack ...

Основные типы проектов: CMS, eCommerce, SEO, LMS, ECM, BPM

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *