Настройка nginx+apache

12
A
На сайте с 08.12.2009
Offline
51
#11
skyscr:
alivar, настройки не помогли...
а вот php запросы в базу и обратный вывод картинок долго тупит...

Щас перепрочел начало топика и немного не понял. Как связаны картинки и запросы в базу. Картинки на ФС лежат или в базе?

seocore
На сайте с 25.09.2006
Offline
143
#12
alivar:
Картинки на ФС лежат или в базе?

интересно, если картинки лежат в базе - то это вообще, что-то на грани адекватности 🍿

а ТС - совет: настройте кеширование по нужным location ~ в nginx'е вот и решите свою проблему 🚬

Инструменты для веб-мастера: кластеризатор СЯ (https://goo.gl/MQWfqO), все запросы конкурента (https://goo.gl/hd5uHS), дешевые XML-лимиты (https://goo.gl/aDZbPI)
R
На сайте с 14.02.2010
Offline
77
#13
seocore:
интересно, если картинки лежат в базе - то это вообще, что-то на грани адекватности

бывает и такое, но чаше примерно вот такое -

http://forum.site.ru/download/file.php?avatar=77.jpg или ?id=777&mode=view (вложение фотки)

даже в этом случае лучше избавиться от лишних дерганий базы и пхп вообще, прикрутив кеширование хотя бы на 5 мин... nginx очень быстро раздаст подобное через кипаливы, так что поддерживаю на все 100

A
На сайте с 08.12.2009
Offline
51
#14
seocore:
интересно, если картинки лежат в базе - то это вообще, что-то на грани адекватности 🍿

Ниче.. я как то видел и тексты сайта хранили в BLOB'e. Так и не понял зачем...

skyscr
На сайте с 26.01.2010
Offline
68
#15

вот функции запросов этих картинок в virtuemart

classes/

function image_tag($image, $args="", $resize=1, $path_appendix='product', $thumb_width=0, $thumb_height=0 ) {
global $mosConfig_live_site, $mosConfig_absolute_path;
require_once( CLASSPATH . 'imageTools.class.php');

$border="";
if( strpos( $args, "border=" )===false ) {
$border = 'border="0"';
}
$height = $width = 0;

if ($image != "") {
// URL
if( substr( $image, 0, 4) == "http" ) {
$url = $image;
}
// local image file
else {
if(PSHOP_IMG_RESIZE_ENABLE == '1' && $resize==1) {
$url = $mosConfig_live_site."/components/com_virtuemart/show_image_in_imgtag.php?filename=".urlencode($image)."&newxsize=".PSHOP_IMG_WIDTH."&newysize=".PSHOP_IMG_HEIGHT."&fileout=";
if( !strpos( $args, "height=" )) {
$arr = @getimagesize( vmImageTools::getresizedfilename( $image, $path_appendix, '', $thumb_height, $thumb_width ) );
$width = $arr[0]; $height = $arr[1];
}
}
else {
$url = IMAGEURL.$path_appendix.'/'.$image;
$using_resized_image = false;
if( $resize ) {
$image = vmImageTools::getresizedfilename( $image, $path_appendix, '', $thumb_height, $thumb_width );
if( file_exists($image)) {
$using_resized_image = true;
}
}
if( $resize && ! $using_resized_image) {
if( $height < $width ) {
$width = @round($width / ($height / PSHOP_IMG_HEIGHT));
$height = PSHOP_IMG_HEIGHT;
} else {
$height = @round($height / ($width / PSHOP_IMG_WIDTH ));
$width = PSHOP_IMG_WIDTH;
}
}
if( file_exists($image)) {
$url = str_replace( $mosConfig_absolute_path, $mosConfig_live_site, $image );

} elseif( file_exists($mosConfig_absolute_path.'/'.$image)) {
$url = $mosConfig_live_site.'/'.$image;
}

$url = str_replace('//', '/', $url );
$url = str_replace(':/', '://', $url );
if( !strpos( $args, "height=" ) ) {
$f = str_replace( IMAGEURL, IMAGEPATH, $url );

if ( file_exists($f) ) {
$arr = getimagesize( $f );
$width = $arr[0]; $height = $arr[1];
} else {
$width = 100; $height = 100;
}

}

}
$url = str_replace( basename( $url ), $GLOBALS['VM_LANG']->convert(basename($url)), $url );
}
}
else {
$url = VM_THEMEURL.'images/'.NO_IMAGE;
}

return vmCommonHTML::imageTag( $url, '', '', $height, $width, '', '', $args.' '.$border );

}

и html/


if( $db_browse->f("product_thumb_image") ) {
$product_thumb_image = $db_browse->f("product_thumb_image");
}
else {
if( $product_parent_id != 0 ) {
$product_thumb_image = $dbp->f("product_thumb_image"); // Use product_thumb_image from Parent Product
}
else {
$product_thumb_image = 0;
}
}
if( $product_thumb_image ) {
if( substr( $product_thumb_image, 0, 4) != "http" ) {
if(PSHOP_IMG_RESIZE_ENABLE == '1') {
$product_thumb_image = $mosConfig_live_site."/components/com_virtuemart/show_image_in_imgtag.php?filename=".urlencode($product_thumb_image)."&amp;newxsize=".PSHOP_IMG_WIDTH."&amp;newysize=".PSHOP_IMG_HEIGHT."&amp;fileout=";
}
elseif( !file_exists( IMAGEPATH."product/".$product_thumb_image )) {
$product_thumb_image = VM_THEMEURL.'images/'.NO_IMAGE;
}
}
}
else {
$product_thumb_image = VM_THEMEURL.'images/'.NO_IMAGE;
}

// Get the full image path, or URL if set, or the no_image
if( $db_browse->f("product_full_image") ) {
$product_full_image = $db_browse->f("product_full_image");
} elseif( $product_parent_id != 0 ) {
$product_full_image = $dbp->f("product_full_image"); // Use product_full_image from Parent Product
}
else {
$product_full_image = VM_THEMEURL . 'images/' . NO_IMAGE;

// Get the size information for the no_image
if( file_exists( VM_THEMEPATH . 'images/' . NO_IMAGE ) ) {
$full_image_info = getimagesize( VM_THEMEPATH . 'images/' . NO_IMAGE );
$full_image_width = $full_image_info[0]+40;
$full_image_height = $full_image_info[1]+40;
}
}

// Get image size information and add the full URL
if( substr( $product_full_image, 0, 4) != 'http' ) {
// This is a local image
if( file_exists( IMAGEPATH . 'product/' . $product_full_image ) ) {
$full_image_info = getimagesize( IMAGEPATH . 'product/' . $product_full_image );
$full_image_width = $full_image_info[0]+40;
$full_image_height = $full_image_info[1]+40;
}

$product_full_image = IMAGEURL . 'product/' . $product_full_image;
} elseif( !isset( $full_image_width ) || !isset( $full_image_height ) ) {
// This is a URL image
$full_image_info = @getimagesize( $product_full_image );
$full_image_width = $full_image_info[0]+40;
$full_image_height = $full_image_info[1]+40;
}

ещё подскажите пожалуйста, кто знает, как правильно прописать загрузку этих картинок через watermark.php

(RewriteRule ^(.*)$ /watermark/watermark.php [T=application/x-httpd-php,L,QSA] )

пробую писать в nginx

rewrite ^(.*components/com_virtuemart/shop_image/product.*\.jpg)$ /watermark/watermark.php?$1 last;

или

rewrite ^/components/com_virtuemart/shop_image/product/(.*)\.jpg /watermark/watermark.php?$request_filename;

вставлял его в главный location, никаких признаков жизни...

пытается заработать в статике location ~* ^.+\.(gif|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar|swf)$ {

хотя бы вообще не грузит .jpg, просто висит загрузка картинки, но почему через watermark не проходит?

спасибо всем за подсказки 🍻

skyscr
На сайте с 26.01.2010
Offline
68
#16

nginx вроде решил пока так

location ~ ^/components/com_virtuemart/shop_image/product/.*\.(jpg|jpeg|gif|png)$ {

proxy_pass http://127.0.0.1:81;
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;

}
R
На сайте с 14.02.2010
Offline
77
#17
skyscr:
ещё подскажите пожалуйста, кто знает, как правильно прописать загрузку этих картинок через watermark.php

в вашем случае лучше (да и вообще правильнее так всегда, в смысле в меру возможностей, в случае с nginx) использовать location+try_files, а не реврайты. тут подойдет хорошо именованный location, в данном случае (туда же кеширование прикрутить можно и нужно)


location ~ бла-бла {
try_files $uri @pics;
}

location @pics {
proxy_pass ...
proxy_set ...
proxy_cache ...
}

как-то так...

skyscr
На сайте с 26.01.2010
Offline
68
#18

r0mik спасибо за идею, очень хочу попробовать с кешем...

weldpua2008
На сайте с 29.08.2010
Offline
114
#19
skyscr:
Помогите донастроить nginx+apache (mod_php+xcache)
страница грузится быстро, а вот php запросы в базу и обратный вывод картинок долго тупит...
текст и шаблон загрузился, после по очереди появляются картинки, как-будто нельзя в несколько потоков их грузить???
конечно может дело в Joomla+Virtuemart, но при пользовании apache+fcgi или nginx+fcgi, нигде такого тормоза не наблюдал...

Я такое наблюдал, после:

alivar:
чтобы nginx полностью все брал от апача.

и Мне тоже это не помогло ;)

skyscr:
alivar, настройки не помогли...

nginx работает как прокси, и в текущей cdzprt вывод будет тормозить...

Советую всё же сделать так, что бы на странице доступ к картинкам был напрямую, а не через php+база данных, тогда в nginx'е можно будет вписать:

        location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico)$ {
root /var/www/site.ru;
access_log off;
expires 30d;
}
12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий