Перейти к содержанию
Официальный форум поддержки Simpla

Рекомендуемые сообщения

Добрый день!
Возникла потребность развернуть Simpla CMS на сервере под nginx'ом. Все гугления по данному вопросу приводили ни к чему. Один конфиг кривой, в другом что-то не учтено, в третем еще какая-то лажа.
В общем после нескольких часов разнообразных манипуляций получился работоспособный конфиг, который охватывает все настройки от апача. Хочу поделится им с вами, возможно кому-то пригодится.
Так же хотелось бы услышать ваше мнение насчет данного конфига и, возможно, какие-то замечания или предложения по его усовершенствованию.
пс. Данный конфиг идет как отдельный файл для хоста.
ппс. Если кому-то он реально пригодтся - буду очень рад знать, что мой труд востребовался :)
upd. Simpla CMS 2.1.5

server {	listen          80;	server_name     example.com;	root /var/www/example.com;	access_log off;	location = /favicon.ico {			log_not_found off;			access_log off;	}	location = /robots.txt {			allow all;			log_not_found off;			access_log off;	}	location ~* \.(txt|log)$ {			allow 192.168.0.0/16;			deny all;	}	location ^~ /simpla/ {		auth_basic "Administrator Login";		auth_basic_user_file $document_root/simpla/.htpasswd;				try_files $uri $uri/ /index.php;		index index.php;				location ~ \.php$ {			fastcgi_split_path_info ^(.+\.php)(/.+)$;			include /etc/nginx/fastcgi_params;			fastcgi_intercept_errors on;			fastcgi_pass 127.0.0.1:9000;			include fastcgi_params;			fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;		}	}	location ~ /\. { deny all; }		location ~* ^/(api|cache|compiled|config|design/(.*)/html|payment|Smarty|view)/(.*) { deny all; }	location / {			try_files $uri @rewrite;	}	location @rewrite {		rewrite ^/catalog/([^/]+)/?$	index.php?module=ProductsView&category=$1;		rewrite ^/catalog/([^/]+)/([^/]+)/?$	index.php?module=ProductsView&category=$1&brand=$2;		rewrite ^/products/([^/]+)/?$	index.php?module=ProductView&product_url=$1;		rewrite ^/products/?$	index.php?module=ProductsView;		rewrite ^/brands/([^/]+)/?$	index.php?module=ProductsView&brand=$1;		rewrite ^/brands/([^/]+)/page_([^/]+)/?$	index.php?module=ProductsView&brand=$1&page=$2;		rewrite ^/search/([^/]+)/?$	index.php?module=ProductsView&keyword=$1;		rewrite ^/search/?$	index.php?module=ProductsView;		rewrite ^/blog/([^/]+)/?$	index.php?module=BlogView&url=$1;		rewrite ^/blog/?$	index.php?module=BlogView;		rewrite ^/cart/?$	index.php?module=CartView;		rewrite ^/cart/([^/]+)/?$	index.php?module=CartView&add_variant=$1;		rewrite ^/cart/remove/([^/]+)/?$	index.php?module=CartView&delete_variant=$1;		rewrite ^/order/([^/]+)/?$	index.php?module=OrderView&url=$1;		rewrite ^/order/?$	index.php?module=OrderView;		rewrite ^/user/login/?$	index.php?module=LoginView;		rewrite ^/user/register/?$	index.php?module=RegisterView;		rewrite ^/user/logout/?$	index.php?module=LoginView&action=logout;		rewrite ^/user/password_remind/?$	index.php?module=LoginView&action=password_remind;		rewrite ^/user/password_remind/([0-9a-z]+)/?$	index.php?module=LoginView&action=password_remind&code=$1;		rewrite ^/user/?$	index.php?module=UserView;		rewrite ^/sitemap.xml?$	sitemap.php last;		rewrite ^/yandex.xml?$	yandex.php last;		rewrite ^/contact/?$	index.php?module=FeedbackView;		rewrite ^/order/([^/]+)/([^/]+)/?$	index.php?module=OrderView&url=$1&file=$2;		if (!-f $request_filename){			set $rule_26 1$rule_26;		}		if (!-d $request_filename){			set $rule_26 2$rule_26;		}		if ($rule_26 = "21"){			rewrite ^/([^/]*)/?$	index.php?module=PageView&page_url=$1;		}		rewrite ^/?$	index.php?module=MainView&page_url=;				rewrite ^ /index.php;	}	location ~ \.php$ {			fastcgi_split_path_info ^(.+\.php)(/.+)$;			include /etc/nginx/fastcgi_params;			fastcgi_intercept_errors on;			fastcgi_pass 127.0.0.1:9000;			include fastcgi_params;			fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;	}	location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {		if (!-d $request_filename){			set $rule_28 1$rule_28;		}		if (!-f $request_filename){			set $rule_28 2$rule_28;		}		if ($rule_28 = "21"){			rewrite ^/files/products/(.+) resize/resize.php?file=$1&token=$args;		}		expires max;		log_not_found off;	}}
Ссылка на сообщение
Поделиться на другие сайты
  • 2 месяца спустя...

Отличная работа, все великолепно )
Единственный момент, почему-то не грузит картинки в товарах...
Решение найдено:

location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
if (!-e $request_filename){
rewrite ^/files/products/(.+) /resize/resize.php?file=$1&token=$query_string;
}
}
Ссылка на сообщение
Поделиться на другие сайты
  • 2 месяца спустя...

Отличное решение, спасибо!

 

Единственная проблема возникает с модулями оплаты. При обращении, например, к /payment/Qiwi/callback.php - ошибка 403 с 

[error] 24972#0: *36213 access forbidden by rule, client: 128.68.27.129, server: ******.ru, request: "GET /payment/Qiwi/callback.php?order=30 

 

Что в конфиге поправить чтобы такие переходы обрабатывались корректно?

Ссылка на сообщение
Поделиться на другие сайты

Сам спросил, сам ответил. В приведённом решении строчкой

location ~* ^/(api|cache|compiled|config|design/(.*)/html|payment|Smarty|view)/(.*) { deny all; }

 

запрещается директория /payment/. Если убрать из конфига эту строчку, скрипты оплаты обрабатываются в общем порядке.

Ссылка на сообщение
Поделиться на другие сайты
  • 8 месяцев спустя...

 

Отличная работа, все великолепно )

Единственный момент, почему-то не грузит картинки в товарах...

Решение найдено:

location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
if (!-e $request_filename){
rewrite ^/files/products/(.+) /resize/resize.php?file=$1&token=$query_string;
}
}

так картинки грузит, а вот в админке при попытке загрузить из интернета картинки не загружаются, только с локального компа...как починить можно?

Ссылка на сообщение
Поделиться на другие сайты

Навороты с rule26 предлагается заменить на следующие 2 строки по порядку:

rewrite ^/([^/]+)/?$ /index.php?module=PageView&page_url=$1;
rewrite ^/?$ /index.php?module=MainView&page_url=;
Ссылка на сообщение
Поделиться на другие сайты
  • 5 месяцев спустя...

Решил проблему через роутинг в index.php:

// Routing
$url = isset($_SERVER['REDIRECT_URL']) ? $_SERVER['REDIRECT_URL'] : $_SERVER['REQUEST_URI'];
if ( strpos($url, '?') ) {
	$url = substr($url, 0, strpos($url, '?'));
}
if ( preg_match( '/catalog\/([^\/]+)\/([^\/]+)\/?$/', $url, $matches) ) { 
	$_GET['module'] 	= 'ProductsView';
	$_GET['category'] 	= $matches[1];
	$_GET['brand'] 		= $matches[2];
}
else
if($url == '/'){
	$_GET['module'] 	= 'MainView';
}else
if ( preg_match( '/catalog\/(.+)\/?$/', $url, $matches) ) {
	$_GET['module'] 	= 'ProductsView';
	$_GET['category'] 	= $matches[1];
}
else
if ( preg_match( '/products\/([^\/]+)\/?$/', $url, $matches) ) {
	$_GET['module'] 	 = 'ProductView';
	$_GET['product_url'] = $matches[1];
}
else
if ( preg_match( '/goods\/([^\/]+)\/?$/', $url, $matches) ) {
	$_GET['module'] 	 = 'ProductView';
	$_GET['product_url'] = $matches[1];
}
else
if ( preg_match( '/brands\/([^\/]+)\/page_([^\/]+)\/?$/', $url, $matches) ) {
	$_GET['module'] 	= 'ProductsView';
	$_GET['brand'] 		= $matches[1];
	$_GET['page'] 		= $matches[2];
}
else
if ( preg_match( '/brands\/([^\/]+)\/?$/', $url, $matches) ) {
	$_GET['module'] 	= 'ProductsView';
	$_GET['brand'] 		= $matches[1];
}
else
if ( preg_match( '/blog\/([^\/]+)\/?$/', $url, $matches) ) {
	$_GET['module'] 	= 'BlogView';
	$_GET['url'] 		= $matches[1];
}
else
if ( preg_match( '/blog\/?$/', $url, $matches) ) {
	$_GET['module'] 	= 'BlogView'; 
}
else
if ( preg_match( '/news\/([^\/]+)\/?$/', $url, $matches) ) {
	$_GET['module'] 	= 'BlogView';
	$_GET['url'] 		= $matches[1];
}
else
if ( preg_match( '/news\/?$/', $url, $matches) ) {
	$_GET['module'] 	= 'BlogView';
}
else
if ( preg_match( '/order\/([^\/]+)\/([^\/]+)\/?$/', $url, $matches) ) {
	$_GET['module'] 	= 'OrderView';
	$_GET['url'] 		= $matches[1];
	$_GET['file'] 		= $matches[2];
}
else
if ( preg_match( '/order\/([^\/]+)\/?$/', $url, $matches) ) {
	$_GET['module'] 	= 'OrderView';
	$_GET['url'] 		= $matches[1];
}
else
if ( preg_match( '/order\/?$/', $url, $matches) ) {
	$_GET['module'] 	= 'OrderView';
}
else
if ( preg_match( '/cart\/remove\/([^\/]+)\/?$/', $url, $matches) ) {
	$_GET['module'] 		= 'CartView';
	$_GET['delete_variant'] = $matches[1];
}
else
if ( preg_match( '/cart\/([^\/]+)\/?$/', $url, $matches) ) {
	$_GET['module'] 	= 'CartView';
	$_GET['add_variant']= $matches[1];
}
else
if ( preg_match( '/cart\/?$/', $url, $matches) ) {
	$_GET['module'] 	= 'CartView';
}
else
if ( preg_match( '/search\/([^\/]+)\/?$/', $url, $matches) ) {
	$_GET['module'] 	= 'ProductsView';
	$_GET['keyword']	= $matches[1];
}
else
if ( preg_match( '/contact\/?$/', $url, $matches) ) {
	$_GET['module'] 	= 'FeedbackView';
}
else
if ( preg_match( '/user\/register\/?$/', $url, $matches) ) {
	$_GET['module'] 	= 'RegisterView';
}
else
if ( preg_match( '/user\/?$/', $url, $matches) ) {
	$_GET['module'] 	= 'UserView';
}
else
if ( preg_match( '/user\/login\/?$/', $url, $matches) ) {
	$_GET['module'] 	= 'LoginView';
}
else
if ( preg_match( '/user\/logout\/?$/', $url, $matches) ) {
	$_GET['module'] 	= 'LoginView';
	$_GET['action']		= 'logout';
}
else
if ( preg_match( '/user\/password_remind\/?$/', $url, $matches) ) {
	$_GET['module'] 	= 'LoginView';
	$_GET['action']		= 'password_remind';
}
else
if ( preg_match( '/user\/password_remind\/([^\/]+)\/?$/', $url, $matches) ) {
	$_GET['module'] 	= 'LoginView';
	$_GET['action']		= 'password_remind';
	$_GET['code']		= $matches[1];
}
else
if ( preg_match( '/search\/?$/', $url, $matches) || preg_match( '/products\/?$/', $url, $matches) ) {
	$_GET['module'] 	= 'ProductsView';
}
else {
	 preg_match( '/([^\/]+)\/?$/', $url, $matches);
	$_GET['module'] 	= 'PageView';
	$_GET['page_url'] 	= $matches[1];
}
Ссылка на сообщение
Поделиться на другие сайты
  • 6 месяцев спустя...

Добавлю свои пять копеек. В текущей версии Simpla пароль для админки находится в файле .passwd, соответсвенно нужно заменить строку

auth_basic_user_file $document_root/simpla/.htpasswd;

на

auth_basic_user_file $document_root/simpla/.passwd;
Изменено пользователем yakutec
Ссылка на сообщение
Поделиться на другие сайты
  • 3 недели спустя...

Здравствуйте

Как решили проблему с сохранением

так картинки грузит, а вот в админке при попытке загрузить из интернета картинки не загружаются, только с локального компа...как починить можно?

Стоит nginx + apache2
спасибо
Ссылка на сообщение
Поделиться на другие сайты
  • 2 года спустя...

 

Решил проблему через роутинг в index.php:

// Routing
$url = isset($_SERVER['REDIRECT_URL']) ? $_SERVER['REDIRECT_URL'] : $_SERVER['REQUEST_URI'];
if ( strpos($url, '?') ) {
	$url = substr($url, 0, strpos($url, '?'));
}age_url'] 	= $matches[1];
}

 

я правильно понимаю -- решение дял php-fpm? То есть тогда, когда нет возможности через htaccess?

Изменено пользователем Maksclub
Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...