Когда мы поднимаем локальную или стейджинг-копию сайта на WordPress, часто возникает проблема: база данных подтянута с продакшена и ссылается на все картинки из /wp-content/uploads/, но сами файлы медиа-библиотеки не скачаны.
Решение — настроить проксирование файлов: если в локальной среде нужного файла нет, он будет автоматически подтягиваться с продакшена.
Это позволяет:
- не хранить гигабайты картинок локально;
- работать с актуальным контентом;
- ускорить развёртывание окружения.
Вариант для Nginx
В конфиге локального/стейджинг сайта добавляем правило для uploads.
server {
listen 80;
server_name local.example.test;
root /var/www/local.example.test;
index index.php;
location / {
try_files $uri $uri/ /index.php?$args;
}
# Проксируем картинки из uploads
location /wp-content/uploads/ {
root /var/www/local.example.test;
# если файла нет — идём на продакшен
try_files $uri @production;
}
location @production {
proxy_pass <https://example.com>; # продакшен-домен
proxy_set_header Host example.com;
}
location ~ \\.php$ {
include fastcgi_params;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
Как это работает:
try_files $uri @production;проверяет, есть ли файл локально.- Если нет — срабатывает
@production, и Nginx качает его с продакшена.
Вариант для Apache
Для Apache есть два варианта:
- через
.htaccess(подходит для локальной разработки), - через
VirtualHostв конфигурации.
1. Вариант с .htaccess
В корне сайта создаём/дополняем .htaccess:
RewriteEngine On
# Проксируем только uploads
RewriteCond %{REQUEST_URI} ^/wp-content/uploads/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ <https://example.com/$1> [P,L]
2. Вариант с VirtualHost
<VirtualHost *:80>
ServerName local.example.test
DocumentRoot /var/www/local.example.test
<Directory /var/www/local.example.test>
AllowOverride All
Require all granted
</Directory>
ProxyPreserveHost On
# Если файла нет локально — берём с продакшена
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/wp-content/uploads/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ <https://example.com/$1> [P,L]
ErrorLog ${APACHE_LOG_DIR}/local-error.log
CustomLog ${APACHE_LOG_DIR}/local-access.log combined
</VirtualHost>
Советы и нюансы
- Лучше использовать HTTPS для проксирования, чтобы избежать проблем с mixed content.
- Если продакшен на Cloudflare/CDN — можно проксировать напрямую к нему (будет быстрее).
- Если хотите, чтобы файлы кэшировались локально после первого запроса, можно подключить proxy_cache (Nginx) или mod_cache (Apache).
- Для стейджинга иногда достаточно разово синкануть
uploadsчерезrsync, но прокси даёт больше гибкости.
👉 Таким образом, и в Nginx, и в Apache можно легко организовать автоматическую подгрузку картинок с продакшена в локальное или тестовое окружение, не забивая диск и не тратя время на копирование всей медиатеки.