Если ImageCache не дружит с Nginx - не отображаются превьюшки

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

Для этого как всегда прочитал тонны мануалов, и вот что вычитал:
В настройках виртуального хоста nginx надо прописать следущие директивы:

location ~* \.(jpg|jpeg|gif|png|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|tar|wav|bmp|rtf|swf|ico|flv|txt|xml|docx|xlsx)$ {
root /home/nikita/www/mylo34.ru/;
index index.html index.php;
access_log off;
expires 30d;
  error_page 404 = @fallback;
  proxy_cache_valid 404 1m;
}
 
location ~ /\.ht {
deny all;
}
location / {
proxy_pass http://127.0.0.1:81/;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-for $remote_addr;
proxy_set_header Host $host;
proxy_connect_timeout 60;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_redirect off;
proxy_set_header Connection close;
proxy_pass_header Content-Type;
proxy_pass_header Content-Disposition;
proxy_pass_header Content-Length;
}
location @fallback { 
proxy_pass http://127.0.0.1:81;  
proxy_set_header X-Real-IP $remote_addr; 
proxy_set_header X-Forwarded-for $remote_addr; 
proxy_set_header Host $host; 
} 

что всё это значит:
первый location говорит о том, что статические картинки надо отдавать через nginx.
Самая важная строчка - это

  error_page 404 = @fallback;
  proxy_cache_valid 404 1m;

Она говорит о том, что если картинки нету, то nginx не будет показывать 404 ошибку, а будет перенаправлять запрос на загадочный @fallback, который у нас описан в том же конфиге ниже:

location @fallback { 
proxy_pass http://127.0.0.1:81;  
proxy_set_header X-Real-IP $remote_addr; 
proxy_set_header X-Forwarded-for $remote_addr; 
proxy_set_header Host $host; 
} 

Этот location говорит о том, что нужно все запросы на @fallback перенаправлять на apache, который у меня на 81м порту работает. Вот и всё.

При запросе ImageCacha картинки, которой не существует, nginx отдает запрос apach'у, и тот отдает команду php-скрипту друпала сгенерировать новую картинку.

Еще один нюанс: нельзя ставить слеш / после proxy_pass, т.е. такой вариант неправильный proxy_pass http://127.0.0.1:81/; надо писать без слеша, т.е. именно

proxy_pass http://127.0.0.1:81;  

И последняя заморочка была с размером файлов - чтобы можно было загружать файлы больше 1Мб надо прописать в /etc/nginx/nginx.conf в секцию http

client_max_body_size 150m;

Удачи!

Источники решения:
http://cppmm.blogspot.com/2011/02/drupal-imagecache-nginx-web.html
http://kulagin.org/content/kak-podruzhit-imagecache-i-nginx
http://forum.nginx.org/read.php?21,29388
http://forum.nginx.org/read.php?21,41095,41249

Drupal 6

Комментарии

Добавить комментарий