nginx и imagecache - гибкость в ущерб скорости?

Главные вкладки

Аватар пользователя Stalker-g2 Stalker-g2 29 мая 2008 в 12:36

Многие из вас на своих нагруженных проектах используют nginx.

Я видел на форуме, что при этом многие отказываются от замечательного модуля imagecache, который позволяет автоматически генерировать несколько вариантов одной картинки с разными размерами. Вот мол, не генерируются картинки, когда стоит nginx перед апачом.

Зря! Вот конфигурация хоста в nginx, где всё замечательно работает

    server {
        listen       88.212.201.85:80;
        server_name  test.ru;

        location / {
            proxy_pass  http://127.0.0.1/;
            proxy_redirect      off;

            proxy_set_header    Host    $host;
            proxy_set_header    X-Real-IP       $remote_addr;
            proxy_set_header    X-Forwarded-For $remote_addr;

        }
        location ~* /sites/all/files/imagecache/ {
            root /home/www.test.ru/public_html;
            error_page 404 = [user=backend]backend[/user];
        }
        location [user=backend]backend[/user] {
            proxy_pass  http://127.0.0.1;
            proxy_redirect      off;

            proxy_set_header    Host    $host;
            proxy_set_header    X-Real-IP       $remote_addr;
            proxy_set_header    X-Forwarded-For $remote_addr;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/local/www/nginx-dist;
        }

    }

прочитать исходник с подробным конфигом

Комментарии

Аватар пользователя PanDa777 PanDa777 29 мая 2008 в 14:40

Где-то здесь я уже это видел Smile И кто-то вроде даже утверждал, что nginx вообще мощнее Apache по настройкам...

Но всё равно: спасибо, что выложили....

P.S. Какой-то заголовок немного неудачный...

Аватар пользователя kiev1 kiev1 29 мая 2008 в 15:25

ну да, в принципе можно и так - большие фотки отдавать апачем а маленькие nginx-ом, но более правильно в nginx-е прописать что бы он все картинки отдавал сам а в случае их отсутствия передавал управление апачу

Аватар пользователя Stalker-g2 Stalker-g2 29 мая 2008 в 16:50

не, народ
я от половины вас тащусь если честно
как можно комментить то, что не читал???
ну да, в принципе можно и так - большие фотки отдавать апачем а маленькие nginx-ом, но более правильно в nginx-е прописать что бы он все картинки отдавал сам а в случае их отсутствия передавал управление апачу
что это за идиотизм? где в конфиге написано, что большие картинки отдаются апачом,а маленькие nginx-ом??? ну бреееед

        location ~* /sites/all/files/imagecache/ {
            root /home/www.test.ru/public_html;
            error_page 404 = [user=backend]backend[/user];
        }

по-моему, то очень похоже на запись, которая говорит nginx-у, что если файла нет-запросить его у апача,а если есть-то отдать.
особенно если чуть-чуть подумать

Где-то здесь я уже это видел Smile И кто-то вроде даже утверждал, что nginx вообще мощнее Apache по настройкам...
вообще-то пост не об этом

Аватар пользователя PanDa777 PanDa777 29 мая 2008 в 18:52

вообще-то пост не об этом
Я всего лишь сказал, что уже видел решение этой проблемы где-то в комментариях. А именно: как сделать так, чтобы модуль Imagecache работал вместе с nginx (разве пост не об этом ?). Также я помню, что автор этого сообщения (в котором было решения) то ли прямо в этом же сообщении, то ли где-то ещё, но в это же время сказал, что nginx очень мощен в настройках (именно так у меня запомнился тот комментарий). Об этом я и информировал общественность. В тоже время я подумал, что всё равно хорошо: быстрее в будущем найду, если понадобится.

С чего Вы взяли, что я откомментировал, даже не прочитав пост? Уверяю Вас: до того, как оставить этот комментарий я даже тщательно проанализировал, где же обеспечивается требуемая функциональность (ибо в прошлый раз я как-то конкретно не стал в этом разбираться). Поэтому применительно ко мне(а второй комментарий явно относился ко мне) мне был несколько непонятен и неприятен....

Так, к слову: оффтопик начали Вы...

Аватар пользователя PanDa777 PanDa777 29 мая 2008 в 20:51

Специально нашёл, откуда же у меня это отпечаталось... http://www.drupal.ru/node/13682 и http://www.drupal.ru/node/13598
Если не решение - хорошо, спасибо за верное. Но в глазах того, кто практически не знаком с nginx - это было решение. Тем более, что отрицательных отзывов я не видел. Просто вся статья была построена по принципу "никто не знает, как же это сделать", на что у меня возникла естественная реакция: кажется, кто-то знал. Ладно, закончим оффтопик соверешенно не по делу. Просто мне до сих пор непонятно,почему вы решили, что я прокомментировал, не прочитав и не вникнув... Тем более, ничего отрицательного сказано не было Sad

Аватар пользователя kiev1 kiev1 30 мая 2008 в 0:02

Спасибо огромное за пояснения
просто я увидел /sites/all/files/imagecache/
и подумал что это сработает с тем что выдается через imagecache
но ведь картинки то лежат не в imagecache директории а в просто files

а вообще еще лучше сделать что бы через nginx выдавалось все, кроме php, - и css и баннеры и картинки темы
что то навроде этого

location ~* /  {
    if (-f $request_filename) {
       rewrite \.(module|inc|info|engine|sql|sh|php)$  / permanent;
    }
    root /home/www.test.ru/public_html;
       error_page 404 = [user=backend]backend[/user];
}
Аватар пользователя kiev1 kiev1 30 мая 2008 в 13:57

ну а как сделать что бы все что было вида картинок, файлов и подобное - грузились через nginx в не зависимости от пути, а в случае не нахождения файла передавалось на apache?

Аватар пользователя dfaker dfaker 16 ноября 2008 в 0:21

gumk примерно так:

    location ~ /files/imagecache/.*\.(jpg|jpeg|gif|png)$ {
        if (!-f $request_filename) {
            rewrite ^/(.*)$ /index.php?q=$1;
        }
    }

например у тебя путь к рисунку на странице /files/imagecache/imagecache-cover-full/covers/cover_60_1_1.jpg, нужно чтоб обращение было такое: /index.php?q=/files/imagecache/imagecache-cover-full/covers/cover_60_1_1.jpg (можно в браузере вбить этот путь и покажется рисунок) тогда рисунок сгенерится

Аватар пользователя dfaker dfaker 2 июля 2009 в 22:49

Вот так например (не полный конфиг):

server {
    listen 8080;
    server_name 192.168.0.5;
    root /var/www-nginx/drupal;

    location / {
        try_files $uri $uri/ [user=drupal]drupal[/user];
        index index.php index.html index.htm;
    }
     
    location ~ \.php$ {
        try_files $uri [user=drupal]drupal[/user];
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include  fastcgi_params;
    }

    location [user=drupal]drupal[/user] {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME      $document_root/index.php;
        fastcgi_param  QUERY_STRING         q=$uri&$args;
        fastcgi_param  REQUEST_METHOD       $request_method;
        fastcgi_param  CONTENT_TYPE         $content_type;
        fastcgi_param  CONTENT_LENGTH       $content_length;
        fastcgi_param  REDIRECT_STATUS      200;
        fastcgi_param  SCRIPT_NAME          /index.php;
        fastcgi_param  REQUEST_URI          $request_uri;
        fastcgi_param  DOCUMENT_URI         $document_uri;
        fastcgi_param  DOCUMENT_ROOT        $document_root;
        fastcgi_param  SERVER_PROTOCOL      $server_protocol;
        fastcgi_param  GATEWAY_INTERFACE    CGI/1.1;
        fastcgi_param  SERVER_SOFTWARE      nginx/$nginx_version;
        fastcgi_param  REMOTE_ADDR          $remote_addr;
        fastcgi_param  REMOTE_PORT          $remote_port;
        fastcgi_param  SERVER_ADDR          $server_addr;
        fastcgi_param  SERVER_PORT          $server_port;
        fastcgi_param  SERVER_NAME          $server_name;
    }
}

Аватар пользователя dfaker dfaker 2 июля 2009 в 22:54

С этим конфигом imagecache работает, только версия nginx нужна 0.7.51 и выше, так как используется новая директива try_files. Так стоит проверить права записи на соответствующие каталоги.

Аватар пользователя MjM MjM 19 октября 2009 в 16:31

ответ sky-host:
===
К сожалению, индивидуальная настройка nginx для аккаунтов вирт. хостинга невозможна, так как это повлияет на работу всех остальных аккаунтов на сервере. То же самое относится ко всем остальным сервисам (apache, mysql, ftp, pop3, smtp)
===

Аватар пользователя TommyFar TommyFar 5 ноября 2009 в 0:17

Если у Вас nginx, то ищем строку:

location / {
root /mnt/www/www.site.ru;
index index.php index.html;
}

меняем на:

location / {
root /mnt/www/www.site.ru;
index index.php index.html;

if (!-e $request_filename) {
rewrite ^/(.*)$ /index.php?q=$1 last;
}

}

ВСЕ! imagecache просто просит правильные ссылки (пути)

Аватар пользователя vyck24 vyck24 6 августа 2012 в 7:57

Здраствуйте!
Я сталкнулся с этой же проблемой! После перехода на vds на nginx imagecache не работает.
Из того что я понел нужно всё это добавить в nginx.conf. Я пробовал и не работает. Просьба напишите целиком то что я должен добавить и может мне стоит ещё что нибудь сделать (перезагрузка сервера) чтобы заработал.
сайт veevo.ru, буду благодарен!

Аватар пользователя Dimedrius Dimedrius 8 октября 2012 в 20:51

Лично я сделал вот так сразу за блоком объявления бекэнда:
"error_page 404 = @backend;".
Просто и работает)
P.S.: [сарказм]и где это существуют серверы, которые нужно перезагружать для чтения конфиг файла?))))[/сарказм]