Сейчас работает такая схема:
apache - backend, nginx - frontend. Используется fastcgi для phpmyadmin.
Периодически сайт подвисает, apache плодит кучу процессов и загружает машину, что сайт перестаёт работать.
В корне сайта есть .htaccess который читает apache, видел есть перекодировшик под nginx. Но какие правило нужно переносить какие нет?
Имеется ли пошаговая, свежая инструкция по переносу? В интернете сейчас куча статей 2012 и старше годов.
1) из вашего объяснения не понятно, что именно на бекенде? PHP через FastCGI через апач? Или вы про fcgi для красного словца приплели?
2) NginX не умеет интерпретировать php самостоятельно (в отличие от Lua и Perl'а) и для него нужно будет запускать php-fpm и подцеплять.
Перекодировщик правил из .htaccess есть, но он слишком много делает на if, что неверно. Так что просто давайте сюда ваш .htaccess и я переделаю его на рерайты.
tirael777: в том-то и дело, что написано не ясно (двусмысленно). Но, раз php-fpm стоит, то и неважно. Для того, чтобы "подцепить" вам нужно: 1) настроить php-fpm слушать unix-сокет по определённому пути или tcp-порт на 127.0.0.1. В конфиге (что-то типа /etc/php/php-fpm.conf (путь не точный, на разных дистрибутивах по-разному, но должно быть где-то там) оно обзывается listen.*; там же есть и описание каждой из них. Если активируете listen на сокете, то не забыть выставить права и группы (и потом проверить что они пересекаются с теми юзером/группой под которыми запускается NginX). Если tcp-порт на локалхосте, то адреса и порта достаточно.
Потом в конфиге nginx создать апстрим с этим адресом (либо unix:/путь/до/сокета, либо ip-адресом и tcp-портом через двоеточие). Потом подавать этот апстрим в директиву fastcgi_pass.
Касательно же правил:
======
php_flag display_startup_errors on
php_flag display_errors on
php_flag html_errors on
======
Вот это выставлять в php.ini (или php-fpm.conf) или по аналогии с .htaccess в .user.ini в папке с сайтом (для этого в системном php.ini включить директиву user_ini)
======
mod_gzip оставим на потом. Оно, вроде и в дефолте неплохо, но вот вырезка из моего:
======
gzip on;
gzip_static off;
gzip_buffers 32 8k;
gzip_http_version 1.0;
gzip_comp_level 6;
gzip_min_length 1100;
gzip_types text/plain text/css image/x-icon image/gif application/x-javascript text/xml application/xml application/xml+rss text/javascript;
gzip_vary on;
gzip_disable "MSIE [1-6]\.(?!.*SV1)";
======
Дальше
======
Order Deny,Allow
Deny from 144.76.70.117
Deny from 91.223.138.2
Deny from 68.180.231.53
Deny from 66.249.78.229
Allow from all
======
if (!-f $request_filename){
set $rule_4 1$rule_4;
}
if (!-d $request_filename){
set $rule_4 2$rule_4;
}
if ($uri !~ ".*.(ico|gif|jpg|jpeg|png|js|css)"){
set $rule_4 3$rule_4;
}
if ($rule_4 = "321"){
rewrite ^/([^?]*) /index.php?_route_=$1 last;
}
if ($http_referer !~ "^$"){
set $rule_5 1$rule_5;
}
if ($http_referer !~* "^http(s)?://(www.)?site.ru"){
set $rule_5 2$rule_5;
}
if ($rule_5 = "21"){
return 403;
break;
}
if ($args ~ "^route=common/home$"){
set $rule_8 1$rule_8;
}
if ($request_method !~ "^POST$"){
set $rule_8 2$rule_8;
}
if ($rule_8 = "21"){
rewrite ^/index.php$ http://$http_host? permanent;
}
if ($http_host ~ "^163.172.140.253$"){
set $rule_9 1$rule_9;
}
if ($rule_9 = "1"){
rewrite ^/(.*)$ /site.ru/$1 permanent;
}
Но это слишком замудрёно и половина, как мне кажется, не нужна.
Вадим Мисбах-Соловьёв:
Сделал я вот так, не работает, сайт не загружается в логах ничего, я в шоке от этого.
server {
listen 80;
server_name multiblender.ru www.multiblender.ru;