Nginx + Картинки

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

Аватар пользователя yurgon yurgon 2 июля 2009 в 4:26

Вообщем переехал я на сервер, там стоит nginx.

Что делать картинки перестали отображаться через imagecache, но как только я выключаю ЧИСТЫЕ ССЫЛКИ все отображает....

Что делать? Где копать?

Спасибо.

Комментарии

Аватар пользователя Arhimad Arhimad 2 июля 2009 в 15:09

Не ищите адекватного решения не найдете я занимался поясками неделю пока сам не покурил маны nginx. Копать надо конфиг nginx.

И вот мой рабочий конфиг, предложите его хостеру или вставте в секцию server:
пример конфига приведен для nginx без апача.

не забудьте поменять все пути на ваши.

server {
client_max_body_size 16m; # разрешенный размер файла для загрузки
    listen       "IP адрес сервера":80;
    server_name  "ваш домен".ru www."ваш домен".ru;
    access_log   /usr/local/nginx/logs/"ваш домен".log;

    root   /home/www/"ваш домен".ru/htdocs; # Здесь меняем путь в вашелу каталогу с сайтом
    index  index.php;

        location = / { rewrite . /index.php last; }  # чтение корня и отдача все в index.php, обязательно
        location / { rewrite ^(.*)$ /index.php?q=$1 last; } # Для чистых ссылок

        # Понадобилось для PhpMyAdmin
        location = /my/ { rewrite . /my/index.php last; }

        # Imagecache (http://drupal.org/project/imagecache)
        location /sites/default/files/imagecache/ {
                if (-f $request_filename) { break; }
                rewrite ^(.*)$ /index.php?q=$1 last;
        }

        # Fckeditor, так же не завелся как и Imagecache
        location /sites/all/modules/fckeditor/ {
                if (-f $request_filename) { break; }
                rewrite ^(.*)$ /index.php?q=$1 last;
        }

        # server static files directly
        location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|wav|bmp|rtf|js|swf)$ {
        rewrite ^/favicon.ico$ /sites/all/themes/"ваша тема"/favicon.ico break;
        access_log        off;
        expires           30d;
        }
        location ~ \.php$ {
        fastcgi_pass   127.0.0.1:9099; # передаем все пхп на пхп обработчик
        fastcgi_index  index.php;

        fastcgi_param  SCRIPT_FILENAME  /home/www/"ваш сайт"/htdocs$fastcgi_script_name;
        include        /usr/local/nginx/conf/fastcgi_params;
        }

    location ~ /\.ht {
        deny  all;
    }

    error_page 403 405          /403.html;
    location = /403.html {
        root   /home/www/root/errors/;
    }

    error_page 404              /404.html;
    location = /404.html {
        root   /home/www/root/errors/;
    }

    error_page 500 502 503 504  /50x.html;
    location = /50x.html {
        root   /home/www/root/errors/;
    }
}

Аватар пользователя Arhimad Arhimad 2 июля 2009 в 13:41

В общем возможно вам надо просто добавить только вот такую локацию в конфиг:

        location /sites/default/files/imagecache/ {
                if (-f $request_filename) { break; }
                rewrite ^(.*)$ /index.php?q=$1 last;
        }

может и не помочь это будет зависеть от общей структуры вашего конфига.

Аватар пользователя Azerot Azerot 2 июля 2009 в 11:14

Сути проблемы не понял. Там где у меня стоит nginx никогда ни с какими картинками проблем не было.
Выводы: нет проблем в связке nginx+imagecache, есть проблема в настройках nginx

Аватар пользователя yurgon yurgon 2 июля 2009 в 11:42

Суть проблемы, то что я вообще отказался от апача...

И собственно нужно решение: переписать правила по выводу картинок для nginx

Аватар пользователя yurgon yurgon 2 июля 2009 в 14:48

на данный момент структура такая:

server {
        listen       ***.***.***.***:80;
        server_name  *****.com www.******.com ;
        access_log /var/log/httpd/domains/*****.com.log  main;
        error_log  /var/log/httpd/domains/*****.com.error.log error;
        location ~* ^.+\.(php)$ {
                     fastcgi_pass   unix:/tmp/php.sevstyle.sock;                          
                     fastcgi_index  index.php;                                
                     fastcgi_param  SCRIPT_FILENAME  /home/sevstyle/domains/******.com/public_html$fastcgi_script_name;
                     fastcgi_param  QUERY_STRING     $query_string;                                                          
                     fastcgi_param  REQUEST_METHOD   $request_method;                                                        
                     fastcgi_param  CONTENT_TYPE     $content_type;                                                          
                     fastcgi_param  CONTENT_LENGTH   $content_length;                                                        

        }
        location / {
                         proxy_pass         http://***.***.***.***:8080/;
                         proxy_redirect     off;                      
                         proxy_set_header   Host             $host;  
                         proxy_set_header   X-Real-IP        $remote_addr;
                         proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
                         client_max_body_size       100m;                                
                         client_body_buffer_size    128k;                              
                         proxy_connect_timeout      90;                                
                         proxy_send_timeout         90;                                
                         proxy_read_timeout         90;
                         proxy_buffer_size          4k;
                         proxy_buffers              4 32k;
                         proxy_busy_buffers_size    64k;
                         proxy_temp_file_write_size 10m;
                         rewrite ^(/)$ /index.php;                                      
                         if (!-e $request_filename) {                                  
                             rewrite ^/(.*)$ /index.php?q=$1 last;                      
                          }
                         root /home/sevstyle/domains/******.com/public_html;
                    }
        location ~* ^.+\.(flv|jpg|jpeg|gif|mp3|png|avi|vob|mpg|mpeg|mp4|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|wav|bmp|rtf|js|swf)$ {

                        root /home/sevstyle/domains/*****.com/public_html;
        }
       
        location ~* /sites/default/files/imagecache/ {
            root /home/sevstyle/domains/******.com/public_html;
            error_page 404 = backend;
        }
        location backend {
            proxy_pass  http://***.***.***.***:8080;
            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;
        }
       
        location ~ /sites/default/files/imagecache/.*\.(jpg|jpeg|gif|png)$ {
        if (!-f $request_filename) {
            rewrite ^/(.*)$ /index.php?q=$1;
        }
        }
       
       
}

Аватар пользователя Arhimad Arhimad 2 июля 2009 в 15:07

у вас что много лишнего, зачем вы передаете все с / через proxy_ .!
вы же говорите отказались от апача,
удалите все со своего конфига и поставьте мой конфиг.
Что бы обрабатывался пхп установите lighttpd только с одной опцией spawn-fcgi, чтоб работала "location ~ \.php$ { fastcgi_pass 127.0.0.1:9099; ....... "

Если у вас конфигурация с апачем то это другое дело, так и скажите поможем. Но я привел пример конфига nginx без апача.

Аватар пользователя Arhimad Arhimad 2 июля 2009 в 17:58

Ну правильно
кто тебе делал конфиг ? хостер ?
во первых у тебя нет строчки "index index.php;" у тебя вообще сервер nginx не знает какие ему файлы поднимать и обрабатывать. про остальное я пока помолчу потому что бредятина написана, но теоретически может работать.

Аватар пользователя dfaker dfaker 4 июля 2009 в 12:29

Если и правда читали маны nginx, то должны были видеть что на данный момент рекомендуется использовать директиву try_files (появилась с версии 7.5.1) вместо "прямой трансляции правил" Как переписать апачевские правила для Drupal. Тут рабочий пример

Аватар пользователя yurgon yurgon 4 июля 2009 в 18:34

сам удивлен , но это все:

server {
        listen       ********:80;
        server_name  ********.com www.********.com ;
        access_log /var/log/httpd/domains/********.com.log  main;
        error_log  /var/log/httpd/domains/********.com.error.log error;
        location ~* ^.+\.(php)$ {
                     fastcgi_pass   unix:/tmp/php.********.sock;                          
                     fastcgi_index  index.php;                                
                     fastcgi_param  SCRIPT_FILENAME  /home/********/
domains/********.com/public_html$fastcgi_script_name;
                     fastcgi_param  QUERY_STRING     $query_string;                                                          
                     fastcgi_param  REQUEST_METHOD   $request_method;                                                        
                     fastcgi_param  CONTENT_TYPE     $content_type;                                                          
                     fastcgi_param  CONTENT_LENGTH   $content_length;                                                        

        }
        location / {
                         proxy_pass         http://********:8080/;
                         proxy_redirect     off;                      
                         proxy_set_header   Host             $host;  
                         proxy_set_header   X-Real-IP        $remote_addr;
                         proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
                         client_max_body_size       100m;                                
                         client_body_buffer_size    4k;                              
                         proxy_connect_timeout      90;                                
                         proxy_send_timeout         90;                                
                         proxy_read_timeout         90;
                         proxy_buffer_size          4k;
                         proxy_buffers              4 32k;
                         proxy_busy_buffers_size    64k;
                         proxy_temp_file_write_size 10m;
                         rewrite ^(/)$ /index.php;                                      
                         if (!-e $request_filename) {                                  
                             rewrite ^/(.*)$ /index.php?q=$1 last;                      
                          }
                         root /home/********/

domains/********.com/public_html;
                    }
        location ~* ^.+\.(flv|jpg|jpeg|gif|mp3|png|avi|vob|mpg|mpeg|mp4|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|wav|bmp|rtf|js|swf)$ {

                        root /home/********/

domains/********/public_html;
        }
       
   
       
       
}