Локальная копия 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;
}
Как это работает:
- Браузер запрашивает
http://wpc.localhost/app/uploads/.... - Локальный Nginx перехватывает запрос раньше, чем он попадёт в WordPress.
- Nginx запрашивает соответствующий файл у
https://wpcraft.ru/wp-content/uploads/.... - Браузер получает изображение с локального домена.
Префикс ^~ важен: он даёт этому маршруту приоритет над общими правилами обработки 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 и не меняет продакшен-конфигурацию. Это позволяет быстро приблизить локальную среду к реальному сайту, не копируя всю медиатеку на компьютер.