Недавно я установил NGINX в качестве обратного прокси для моего сервера apache для обработки статических файлов. Пока все хорошо, все работает нормально, за исключением того факта, что я больше не могу добавлять водяные знаки на свои изображения.
Мой .htaccess на Apache для этого был:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
RewriteRule ^(.*)wp-content/upload/(.*\.(jpg|JPG|jpeg|png))$ $1watermark.php?src=wp-content/upload/$2
</IfModule>
Это мой текущий vhosts nginx.conf (который не работает с водяным знаком):
server {
listen 80;
server_name mydomain.com www.mydomain.com ;
error_log /var/www/vhosts/mydomain.com/statistics/logs/error_log.nginx warn;
location / {
proxy_pass http://www.mydomain.com:8080$request_uri;
include /etc/nginx/proxy.conf;
}
location ~* ^.+\.(jpg|jpeg|gif|png|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|wav|bmp|rtf|js|ico|swf)$ {
root /var/www/vhosts/mydomain.com/httpdocs;
expires 7d;
}
#This here, isnt working#
location /wp-content/upload/ {
rewrite ^/(.*)wp-content/upload/(.*\.(jpg|JPG|jpeg|png))$ /$1watermark.php?src=wp-content/upload/$2;
}
}
Но совсем не работает. Я прочитал документацию по перезаписи nginx, я пытался несколько дней и все еще не могу найти способ заставить ее работать.
location ~ \.(jpg|jpeg|png|gif|swf|flv|pdf)$
Что-то вроде этого кажется знакомым? Это довольно стандартное место для перехвата запросов на статические файлы. Скорее всего, он у вас тоже есть, но я, очевидно, не могу сказать, так как вы решили показать только 1 строку своей конфигурации Nginx.
Теперь, когда мы прочитали документацию об одном из самых основных блоков nginx: местонахождение, мы знаем, что некоторые местоположения имеют приоритет над другими, на самом деле мы знаем, что логика nginx говорит, что, поскольку вы можете сделать местоположение регулярного выражения действительно конкретным, он будет предполагать, что сначала должно использоваться соответствующее местоположение регулярного выражения.
Мы также знаем, что местоположение / является наименее конкретным, которое мы можем получить, поскольку совпадение с левым префиксом для / соответствует каждому возможному URI.
Следовательно, если существует другое подходящее местоположение, то местоположение / не будет использоваться. Учитывая статический запрос из первой части моего ответа и вашу информацию о том, что вы поместили перезапись в нужное место, мы, вероятно, теперь знаем почему!
Если он по-прежнему не работает, предоставьте свою конфигурацию, чтобы у людей были реальные данные для работы.
Теперь выражения выглядят так же, за исключением начальных косых черт в перезаписи nginx. Поскольку вы смотрели на это несколько дней, я предполагаю, что вы уже рассмотрели эту часть.
Убедитесь, что блок местоположения с этой перезаписью действительно соответствует запросам изображения (и не перекрывается каким-либо другим блоком местоположения). Если вы уверены, что это так, добавьте соответствующий флаг в строку перезаписи nginx. Я бы предположил break
уместно в этом случае.