У меня Drupal 7.2, установлен на VDS, где настроен nginx.
Столкнулся со странной проблемой.
Опция чистых ссылок в панели управления сайтом доступна. Я ее включаю, сайт работает с красивыми ссылками без проблем. Любые ссылки и картинки отображаются.
Единственная проблема заключается в том, что я с включенной опцией чистых ссылок не могу загрузить картинки на сайт. Это касается поля изображения для ноды, а также загрузки аватара в профиль пользователя. Выбираю файл, жму сохранить или загрузить, в ответ никаких ошибок. Для Drupal загрузка картинок как бы завершается успехом, поскольку появляется ссылка и размер. Но самих картинок по сформированным ссылкам нет!
Наблюдения:
- Если отключить "чистые ссылки", то картинки без проблем загружаются. Т.е. с правами на каталоги все в порядке.
- Если загрузить картинки с отключенной опцией "чистые ссылки", а потом ключить ее, то картинки проболжают без проблем показываться на сайте, т.е. не работает именно загрузка.
Пожалуйста помогие. Уже не знаю куда смотреть. Любые советы приветствуются.
На всякий случай конфиг nginx:
listen 80;
server_name www.site.ru;
rewrite ^ http://site.ru$request_uri? permanent; #301 redirect
}
server {
listen 80;
server_name site.ru;
root /home/sites/site.ru/www;
index index.html index.php;
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param DOCUMENT_ROOT /home/sites/site.ru/www;
fastcgi_param SCRIPT_FILENAME /home/sites/site.ru/www$fastcgi_script_name;
fastcgi_param PATH_TRANSLATED /home/sites/site.ru/www$fastcgi_script_name;
include fastcgi_params;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_intercept_errors on;
fastcgi_ignore_client_abort off;
fastcgi_connect_timeout 60;
fastcgi_send_timeout 180;
fastcgi_read_timeout 180;
fastcgi_buffer_size 128k;
fastcgi_buffers 4 256k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
}
location / {
try_files $uri $uri/ index.html /index.php?q=$uri&$args;
}
location = /favicon.ico {
log_not_found off;
access_log off;
}
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
## Disable viewing .htaccess & .htpassword
location ~ /\.ht {
deny all;
}
access_log /home/sites/site.ru/logs/site.ru_access.log;
error_log /home/sites/site.ru/logs/site.ru_error.log;
location ~* ^.+.(js|css|png|jpg|jpeg|gif|ico)$ {
access_log off;
expires max;
}
}
Комментарии
Проблема аналогичная, но решения так и нет:
http://drupal.org/node/1179436
http://drupal.org/node/1169116#comment-4570522
access_log off;
error_page 404 = [user=fallback]fallback[/user];
expires max;
}
location [user=fallback]fallback[/user] {
proxy_pass 127.0.0.1:9000;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
}
Спасибо за ответ, но пожалуйста прокомментируйте. Это решение или просто что-то типа правильной обработки ошибок? Попытался использовать код, но у меня при перезапуске nginx ругается на строку: proxy_pass 127.0.0.1:9000.
Restarting nginx: nginx: [emerg] invalid URL prefix in /etc/nginx/sites-enabled/site.ru:71
чего тут комментировать то) при попытке получить не существующую картинку, запрос будет передан на бакэнд
http://www.drupal.ru/node/15335
Не помогло. Ошибку с proxy_pass 127.0.0.1:9000 исправил указав http, т.е. код следующий:
access_log off;
error_page 404 = [user=fallback]fallback[/user];
expires max;
}
location [user=fallback]fallback[/user] {
proxy_pass http://127.0.0.1:9000;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
}
В таком виде nginx перезапустился без ошибок. Но эффект нулевой. Так же, при отключенных чистых ссылках картинки грузятся, а при включенных - нет.
Если я правильно понимаю, то у меня проблема не в получении картинки, а в ее создании.
почитайте про механизм image styles
Вот здесь хорошо написано о проблеме http://www.drupal.ru/node/57750 и дается решение, которое работает. Но не уверен, что это оптимально.
Такое решение в теории более правильное, но почему же оно у меня не работает? Вы взяли строчки настроек с работающего сервера?
да, только у меня не fastcgi
Поставил nginx фронтэндом. Столкнулся с проблемой: при загрузке картинки не получаются другие стили. Т.е. оригинальное изображение есть, но нету, к примеру, превью.
Рублю статику стандартным
location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|flv|rtf|js|swf|iso)$
Как и следовало ожидать, если убрать из регулярки jpg, стили появляются. Т.е. Апач, несмотря на проксирование, работает корректно. Но если графику грузит nginx, получается такая ерунда. И главное, понять не могу, где не хватает. Может права, или пути не так, но в логах ничего нет. nginx пишет, что не найден файл, его и впрямь нет при проверке вручную.